ZGlmZiAtLWdpdCBhL0NIQU5HRUxPRyBiL0NIQU5HRUxPRwppbmRleCAzNmU4YzJlLi4zYjZkOGRhIDEwMDY0NAotLS0gYS9DSEFOR0VMT0cKKysrIGIvQ0hBTkdFTE9HCkBAIC0yLDYgKzIsMTMgQEAKIENoYW5nZXMgZm9yIFUtQm9vdCAxLjEuMzoKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAorKiBQYXRjaGVzIGJ5IFJpY2hhcmQgV29vZHJ1ZmYsIDAxIE9jdCAyMDA0OgorICBhZGQgc3VwcG9ydCBmb3IgdGhlIFRJIE9NQVAyNDIwIHByb2Nlc3NvciBhbmQgaXRzIEg0IHJlZmVyZW5jZQorICBib2FyZAorCisqIFBhdGNoIGJ5IENocmlzdGlhbiBQZWxsZWdyaW4sIDI0IFNlcCAyMDA0OgorICBBZGRlZCBzdXBwb3J0IGZvciBORTIwMDAgY29tcGF0aWJsZSAoRFA4MzkwLCBEUDgzOTAyKSBOSUNzLgorCiAqIFBhdGNoIGJ5IExlaWYgTGluZGhvbG0sIDIzIFNlcCAyMDA0OgogICBhZGQgc3VwcG9ydCBmb3IgdGhlIEFNRCBkYjE1NTAgYm9hcmQKIApkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUwppbmRleCBmNTQ1MDE2Li43MzJmNjdmIDEwMDY0NAotLS0gYS9NQUlOVEFJTkVSUworKysgYi9NQUlOVEFJTkVSUwpAQCAtMzgyLDYgKzM4MiwxMCBAQAogCiAJb21hcDU5MTJvc2sJCUFSTTkyNkVKUwogCitSaWNoYXJkIFdvb2RydWZmIDxyLXdvb2RydWZmMkB0aS5jb20+CisJCisJb21hcDI0MjBoNAkJQVJNMTEzNkVKUworCiBEYXZpZCBN/GxsZXIgPGQubXVlbGxlckBlbHNvZnQuY2g+CiAKIAlzbWRrMjQxMAkJQVJNOTIwVApkaWZmIC0tZ2l0IGEvTUFLRUFMTCBiL01BS0VBTEwKaW5kZXggMjc2Y2JiZC4uYThkNWJkOSAxMDA2NDQKLS0tIGEvTUFLRUFMTAorKysgYi9NQUtFQUxMCkBAIC0xNTgsNiArMTU4LDExIEBACiAiCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIEFSTTExIFN5c3RlbXMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK0xJU1RfQVJNMTE9Im9tYXAyNDIwaDQiCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMjIFhzY2FsZSBTeXN0ZW1zCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKQEAgLTE3MCw3ICsxNzUsMTEgQEAKIExJU1RfaXhwPSJpeGRwNDI1IgogCiAKLUxJU1RfYXJtPSIke0xJU1RfU0F9ICR7TElTVF9BUk03fSAke0xJU1RfQVJNOX0gJHtMSVNUX3B4YX0gJHtMSVNUX2l4cH0iCitMSVNUX2FybT0iCVwKKwkke0xJU1RfU0F9CQkJCQkJCVwKKwkke0xJU1RfQVJNN30gJHtMSVNUX0FSTTl9ICR7TElTVF9BUk0xMX0JCQkJXAorCSR7TElTVF9weGF9ICR7TElTVF9peHB9CQkJCQkJXAorIgogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIyBNSVBTIFN5c3RlbXMKQEAgLTIzOCw3ICsyNDcsNyBAQAogZG8KIAljYXNlICIkYXJnIiBpbgogCXBwY3w1eHh8NXh4eHw4eHh8ODIyMHw4MjR4fDgyNjB8ODV4eHw0eHh8N3h4fDc0eHh8IFwKLQlhcm18U0F8QVJNN3xBUk05fHB4YXxpeHB8IFwKKwlhcm18U0F8QVJNN3xBUk05fEFSTTExfHB4YXxpeHB8IFwKIAltaWNyb2JsYXplfCBcCiAJbWlwc3wgXAogCW5pb3N8bmlvczJ8IFwKZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKaW5kZXggY2RhODc1NC4uMzYzZjFjNSAxMDA2NDQKLS0tIGEvTWFrZWZpbGUKKysrIGIvTWFrZWZpbGUKQEAgLTE0MDMsNiArMTQwMywxMiBAQAogeHNlbmdpbmVfY29uZmlnIDoJdW5jb25maWcKIAlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIGFybSBweGEgeHNlbmdpbmUKIAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMgQVJNMTEzNiBTeXN0ZW1zCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitvbWFwMjQyMGg0X2NvbmZpZyA6ICAgIHVuY29uZmlnCisJQC4vbWtjb25maWcgJChAOl9jb25maWc9KSBhcm0gYXJtMTEzNiBvbWFwMjQyMGg0CisKICM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICMgaTM4NgogIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC0tZ2l0IGEvUkVBRE1FIGIvUkVBRE1FCmluZGV4IDMyMzQxZjQuLjUwZTU4ZGMgMTAwNjQ0Ci0tLSBhL1JFQURNRQorKysgYi9SRUFETUUKQEAgLTEzMCw2ICsxMzAsNyBAQAogICAgIC0gczNjMjR4MAlGaWxlcyBzcGVjaWZpYyB0byBTYW1zdW5nIFMzQzI0WDAgQ1BVcwogICAtIGFybTkyNXQJRmlsZXMgc3BlY2lmaWMgdG8gQVJNIDkyNSBDUFVzCiAgIC0gYXJtOTI2ZWpzCUZpbGVzIHNwZWNpZmljIHRvIEFSTSA5MjYgQ1BVcworICAtIGFybTExMzYJRmlsZXMgc3BlY2lmaWMgdG8gQVJNIDExMzYgQ1BVcwogICAtIGF0OTFybTkyMDAJRmlsZXMgc3BlY2lmaWMgdG8gQXRtZWwgQVQ5MVJNOTIwMCBDUFVzCiAgIC0gaTM4NglGaWxlcyBzcGVjaWZpYyB0byBpMzg2IENQVXMKICAgLSBpeHAJCUZpbGVzIHNwZWNpZmljIHRvIEludGVsIFhTY2FsZSBJWFAgQ1BVcwpAQCAtMzAxLDEzICszMDIsMTMgQEAKIAkJQVJNIGJhc2VkIGJvYXJkczoKIAkJLS0tLS0tLS0tLS0tLS0tLS0KIAotCQlDT05GSUdfQVQ5MVJNOTIwMERLLAkJQ09ORklHX0NFUkYyNTAsCQlDT05GSUdfRE5QMTExMCwKLQkJQ09ORklHX0VQNzMxMiwJCQlDT05GSUdfSDJfT01BUDE2MTAsCUNPTkZJR19ISFBfQ1JBRExFLAotCQlDT05GSUdfSU1QQTcsCQlDT05GSUdfSU5OT1ZBVE9ST01BUDE1MTAsCUNPTkZJR19JTk5PVkFUT1JPTUFQMTYxMCwKLQkJQ09ORklHX0xBUlQsCQkJQ09ORklHX0xQRDdBNDAwCQlDT05GSUdfTFVCQk9DSywKLQkJQ09ORklHX09TS19PTUFQNTkxMiwJCUNPTkZJR19TSEFOTk9OLAkJQ09ORklHX1AyX09NQVA3MzAsCi0JCUNPTkZJR19TTURLMjQwMCwJCUNPTkZJR19TTURLMjQxMCwJQ09ORklHX1RSQUIsCi0JCUNPTkZJR19WQ01BOQorCQlDT05GSUdfQVQ5MVJNOTIwMERLLAlDT05GSUdfQ0VSRjI1MCwJCUNPTkZJR19ETlAxMTEwLAorCQlDT05GSUdfRVA3MzEyLAkJQ09ORklHX0gyX09NQVAxNjEwLAlDT05GSUdfSEhQX0NSQURMRSwKKwkJQ09ORklHX0lNUEE3LAkJQ09ORklHX0lOTk9WQVRPUk9NQVAxNTEwLCBDT05GSUdfSU5OT1ZBVE9ST01BUDE2MTAsCisJCUNPTkZJR19MQVJULAkJQ09ORklHX0xQRDdBNDAwCQlDT05GSUdfTFVCQk9DSywKKwkJQ09ORklHX09TS19PTUFQNTkxMiwJQ09ORklHX09NQVAyNDIwSDQsCUNPTkZJR19TSEFOTk9OLAorCQlDT05GSUdfUDJfT01BUDczMCwJQ09ORklHX1NNREsyNDAwLAlDT05GSUdfU01ESzI0MTAsCisJCUNPTkZJR19UUkFCLAkJQ09ORklHX1ZDTUE5CiAKIAkJTWljcm9CbGF6ZSBiYXNlZCBib2FyZHM6CiAJCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMjE3Nyw3ICsyMTc4LDcgQEAKIAlGQURTODUwU0FSX2NvbmZpZwlvbWFwMTYxMGgyX2NvbmZpZwlUUU04NTBMX2NvbmZpZwogCUZBRFM4NjBUX2NvbmZpZwkJb21hcDE2MTBpbm5fY29uZmlnCVRRTTg1NUxfY29uZmlnCiAJRlBTODUwTF9jb25maWcJCW9tYXA1OTEyb3NrX2NvbmZpZwlUUU04NjBMX2NvbmZpZwotCQkJCQkJCVdBTE5VVDQwNV9jb25maWcKKwkJCQlvbWFwMjQyMGg0X2NvbmZpZwlXQUxOVVQ0MDVfY29uZmlnCiAJCQkJCQkJWXVrb244MjIwX2NvbmZpZwogCQkJCQkJCVpQQzE5MDBfY29uZmlnCiAKZGlmZiAtLWdpdCBhL2JvYXJkL29tYXAyNDIwaDQvTWFrZWZpbGUgYi9ib2FyZC9vbWFwMjQyMGg0L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlYWI2YjYKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9vbWFwMjQyMGg0L01ha2VmaWxlCkBAIC0wLDAgKzEsNDcgQEAKKyMKKyMgKEMpIENvcHlyaWdodCAyMDAwLCAyMDAxLCAyMDAyCisjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCisjCisjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisjIHByb2plY3QuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyMgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyMgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisjIE1BIDAyMTExLTEzMDcgVVNBCisjCisKK2luY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5taworCitMSUIJPSBsaWIkKEJPQVJEKS5hCisKK09CSlMJOj0gb21hcDI0MjBoNC5vIGZsYXNoLm8gbWVtLm8gc3lzX2luZm8ubworU09CSlMJOj0gcGxhdGZvcm0ubworCiskKExJQik6CSQoT0JKUykgJChTT0JKUykKKwkkKEFSKSBjcnYgJEAgJF4KKworY2xlYW46CisJcm0gLWYgJChTT0JKUykgJChPQkpTKQorCitkaXN0Y2xlYW46CWNsZWFuCisJcm0gLWYgJChMSUIpIGNvcmUgKi5iYWsgLmRlcGVuZAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKy5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKKwkJJChDQykgLU0gJChDUFBGTEFHUykgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKSA+ICRACisKKy1pbmNsdWRlIC5kZXBlbmQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvb21hcDI0MjBoNC9jb25maWcubWsgYi9ib2FyZC9vbWFwMjQyMGg0L2NvbmZpZy5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzc3MGYzCi0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvb21hcDI0MjBoNC9jb25maWcubWsKQEAgLTAsMCArMSwyNiBAQAorIworIyAoQykgQ29weXJpZ2h0IDIwMDQKKyMgVGV4YXMgSW5zdHJ1bWVudHMsIDx3d3cudGkuY29tPgorIworIyBUSSBINCBib2FyZCB3aXRoIE9NQVAyNDIwIChBUk0xMTM2KSBjcHUKKyMgc2VlIGh0dHA6Ly93d3cudGkuY29tLyBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBUZXhhcyBJbnN0cnVtZW50cworIworIyBINCBoYXMgMSBiYW5rIG9mIDMyTUIgb3IgNjRNQiBtRERSLVNEUkFNIG9uIENTMAorIyBINCBoYXMgMSBiYW5rIG9mIDMyTUIgb3IgMDBNQiBtRERSLVNEUkFNIG9uIENTMQorIyBQaHlzaWNhbCBBZGRyZXNzOgorIyA4MDAwJzAwMDAgKGJhbmswKQorIyBBMDAwLzAwMDAgKGJhbmsxKSBFUzIgd2lsbCBiZSBjb25maWd1cmFibGUKKyMgTGludXgtS2VybmVsIGlzIGV4cGVjdGVkIHRvIGJlIGF0IDgwMDAnODAwMCwgZW50cnkgODAwMCc4MDAwCisjIChtZW0gYmFzZSArIHJlc2VydmVkKQorCisjIEZvciB1c2Ugd2l0aCBleHRlcm5hbCBvciBpbnRlcm5hbCBib290cy4KKyMgQ09ORklHX1BBUlRJQUxfU1JBTSBtdXN0IGJlIGRlZmluZWQgdG8gdXNlIHRoaXMuCitURVhUX0JBU0UgPSAweDgwZTgwMDAwCisKKyMgVXNlZCB3aXRoIGZ1bGwgU1JBTSBib290LgorIyBUaGlzIGlzIGVpdGhlciB3aXRoIGEgR1Agc3lzdGVtIG9yIGEgc2lnbmVkIGJvb3QgaW1hZ2UuCisjIGVhc2llc3QsIGFuZCBzYWZlc3Qgd2F5IHRvIGdvIGlmIHlvdSBjYW4uCisjIENvbW1lbnQgb3V0IC8vQ09ORklHX1BBUlRJQUxfU1JBTSBmb3IgdGhpcyBvbmUuCisjCisjVEVYVF9CQVNFID0gMHg0MDI4MDAwMAorCmRpZmYgLS1naXQgYS9ib2FyZC9vbWFwMjQyMGg0L2ZsYXNoLmMgYi9ib2FyZC9vbWFwMjQyMGg0L2ZsYXNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2I2YTY5ZgotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL29tYXAyNDIwaDQvZmxhc2guYwpAQCAtMCwwICsxLDUzNiBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwMQorICogS3lsZSBIYXJyaXMsIE5leHVzIFRlY2hub2xvZ2llcywgSW5jLiBraGFycmlzQG5leHVzLXRlY2gubmV0CisgKgorICogKEMpIENvcHlyaWdodCAyMDAxLTIwMDQKKyAqIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCisgKgorICogKEMpIENvcHlyaWdodCAyMDAzCisgKiBUZXhhcyBJbnN0cnVtZW50cywgPHd3dy50aS5jb20+CisgKiBLc2hpdGlqIEd1cHRhIDxLc2hpdGlqQHRpLmNvbT4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4JIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvc2l6ZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9ieXRlb3JkZXIvc3dhYi5oPgorCisjZGVmaW5lIFBIWVNfRkxBU0hfU0VDVF9TSVpFCVNaXzEyOEsKK2ZsYXNoX2luZm9fdCBmbGFzaF9pbmZvW0NGR19NQVhfRkxBU0hfQkFOS1NdOwkvKiBpbmZvIGZvciBGTEFTSCBjaGlwcyAgICAqLworCisvKiBCb2FyZCBzdXBwb3J0IGZvciAxIG9yIDIgZmxhc2ggZGV2aWNlcyAqLworI3VuZGVmIEZMQVNIX1BPUlRfV0lEVEgzMgorI2RlZmluZSBGTEFTSF9QT1JUX1dJRFRIMTYKKworI2lmZGVmIEZMQVNIX1BPUlRfV0lEVEgxNgorIyBkZWZpbmUgRkxBU0hfUE9SVF9XSURUSAkJdXNob3J0CisjIGRlZmluZSBGTEFTSF9QT1JUX1dJRFRIVgkJdnVfc2hvcnQKKyMgZGVmaW5lIFNXQVAoeCkJCQlfX3N3YWIxNih4KQorI2Vsc2UKKyMgZGVmaW5lIEZMQVNIX1BPUlRfV0lEVEgJCXVsb25nCisjIGRlZmluZSBGTEFTSF9QT1JUX1dJRFRIVgkJdnVfbG9uZworIyBkZWZpbmUgU1dBUCh4KQkJCV9fc3dhYjMyKHgpCisjZW5kaWYKKworI2RlZmluZSBGUFcJRkxBU0hfUE9SVF9XSURUSAorI2RlZmluZSBGUFdWCUZMQVNIX1BPUlRfV0lEVEhWCisKKyNkZWZpbmUgbWIoKSBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIiIgOiA6IDogIm1lbW9yeSIpCisKKworLyogRmxhc2ggT3JnYW5pemF0aW9uIFN0cnVjdHVyZSAqLwordHlwZWRlZiBzdHJ1Y3QgT3JnRGVmIHsKKwl1bnNpZ25lZCBpbnQgc2VjdG9yX251bWJlcjsKKwl1bnNpZ25lZCBpbnQgc2VjdG9yX3NpemU7Cit9IE9yZ0RlZjsKKworCisvKiBGbGFzaCBPcmdhbml6YXRpb25zICovCitPcmdEZWYgT3JnSW50ZWxfMjhGMjU2TDE4VFtdID0geworCXs0LCBTWl8zMkt9LAkJLyogNCAqIDMya0J5dGVzIHNlY3RvcnMgKi8KKwl7MjU1LCBTWl8xMjhLfSwJCS8qIDI1NSAqIDEyOGtCeXRlcyBzZWN0b3JzICovCit9OworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIEZ1bmN0aW9ucworICovCit1bnNpZ25lZCBsb25nIGZsYXNoX2luaXQgKHZvaWQpOworc3RhdGljIHVsb25nIGZsYXNoX2dldF9zaXplIChGUFcgKiBhZGRyLCBmbGFzaF9pbmZvX3QgKiBpbmZvKTsKK3N0YXRpYyBpbnQgd3JpdGVfZGF0YSAoZmxhc2hfaW5mb190ICogaW5mbywgdWxvbmcgZGVzdCwgRlBXIGRhdGEpOworc3RhdGljIHZvaWQgZmxhc2hfZ2V0X29mZnNldHMgKHVsb25nIGJhc2UsIGZsYXNoX2luZm9fdCAqIGluZm8pOwordm9pZCBpbmxpbmUgc3Bpbl93aGVlbCAodm9pZCk7Cit2b2lkIGZsYXNoX3ByaW50X2luZm8gKGZsYXNoX2luZm9fdCAqIGluZm8pOwordm9pZCBmbGFzaF91bnByb3RlY3Rfc2VjdG9ycyAoRlBXViAqIGFkZHIpOworaW50IGZsYXNoX2VyYXNlIChmbGFzaF9pbmZvX3QgKiBpbmZvLCBpbnQgc19maXJzdCwgaW50IHNfbGFzdCk7CitpbnQgd3JpdGVfYnVmZiAoZmxhc2hfaW5mb190ICogaW5mbywgdWNoYXIgKiBzcmMsIHVsb25nIGFkZHIsIHVsb25nIGNudCk7Cit2b2lkIGZsYXNoX3VubG9jayhmbGFzaF9pbmZvX3QgKiBpbmZvLCBpbnQgYmFuayk7CitpbnQgZmxhc2hfcHJvYmUodm9pZCk7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisvKiBzZWUgaWYgZmxhc2ggaXMgb2sgKi8KK2ludCBmbGFzaF9wcm9iZSh2b2lkKQoreworCXJldHVybihmbGFzaF9nZXRfc2l6ZSAoKEZQVyAqKSBQSFlTX0ZMQVNIXzEsICZmbGFzaF9pbmZvWzBdKSk7Cit9CisKK3Vuc2lnbmVkIGxvbmcgZmxhc2hfaW5pdCAodm9pZCkKK3sKKwlpbnQgaTsKKwl1bG9uZyBzaXplID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgQ0ZHX01BWF9GTEFTSF9CQU5LUzsgaSsrKSB7CisJCXN3aXRjaCAoaSkgeworCQljYXNlIDA6CisJCQlmbGFzaF9nZXRfc2l6ZSAoKEZQVyAqKSBQSFlTX0ZMQVNIXzEsICZmbGFzaF9pbmZvW2ldKTsKKwkJCWZsYXNoX2dldF9vZmZzZXRzIChQSFlTX0ZMQVNIXzEsICZmbGFzaF9pbmZvW2ldKTsKKwkJCS8qIHRvIHJlc2V0IHRoZSBsb2NrIGJpdCAqLworCQkJZmxhc2hfdW5sb2NrKCZmbGFzaF9pbmZvW2ldLGkpOworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCWZsYXNoX2dldF9zaXplICgoRlBXICopIFBIWVNfRkxBU0hfMiwgJmZsYXNoX2luZm9baV0pOworCQkJZmxhc2hfZ2V0X29mZnNldHMgKFBIWVNfRkxBU0hfMiwgJmZsYXNoX2luZm9baV0pOworCQkJLyogdG8gcmVzZXQgdGhlIGxvY2sgYml0ICovCisJCQlmbGFzaF91bmxvY2soJmZsYXNoX2luZm9baV0saSk7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJcGFuaWMgKCJjb25maWd1cmVkIHRvbyBtYW55IGZsYXNoIGJhbmtzIVxuIik7CisJCQlicmVhazsKKwkJfQorCQlzaXplICs9IGZsYXNoX2luZm9baV0uc2l6ZTsKKwl9CisKKwkvKiBQcm90ZWN0IG1vbml0b3IgYW5kIGVudmlyb25tZW50IHNlY3RvcnMKKwkgKi8KKwlmbGFzaF9wcm90ZWN0IChGTEFHX1BST1RFQ1RfU0VULAorCQkJCSAgIENGR19GTEFTSF9CQVNFLAorCQkJCSAgIENGR19GTEFTSF9CQVNFICsgbW9uaXRvcl9mbGFzaF9sZW4gLSAxLCAmZmxhc2hfaW5mb1swXSk7CisKKwlmbGFzaF9wcm90ZWN0IChGTEFHX1BST1RFQ1RfU0VULAorCQkJCSAgIENGR19FTlZfQUREUiwKKwkJCQkgICBDRkdfRU5WX0FERFIgKyBDRkdfRU5WX1NJWkUgLSAxLCAmZmxhc2hfaW5mb1swXSk7CisKKwlyZXR1cm4gc2l6ZTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCit2b2lkIGZsYXNoX3VubG9jayhmbGFzaF9pbmZvX3QgKiBpbmZvLCBpbnQgYmFuaykKK3sKKwlpbnQgajsKKwlpZiAoIWJhbmspCisJCWo9MjsJLyogbGVhdmUgMCwxIGxvY2tlZCBmb3IgYm9vdCBiYW5rICovCisJZWxzZQorCQlqPTA7CS8qIGdldCB0aGUgd2hvbGUgYmFuayBmb3IgIzIgKi8KKworCWZvciAoO2o8Q0ZHX01BWF9GTEFTSF9TRUNUO2orKykgeworCQlGUFdWICphZGRyID0gKEZQV1YgKikgKGluZm8tPnN0YXJ0W2pdKTsKKwkJaWYgKGFkZHIgPT0gTlVMTCkgeworCQkJcHJpbnRmKCJXYXJuaW5nIEZsYXNoIHByb2JlIGZhaWxlZFxuIik7CisJCQlicmVhazsKKwkJfQorCQlmbGFzaF91bnByb3RlY3Rfc2VjdG9ycyAoYWRkcik7CisJCSphZGRyID0gKEZQVykgMHgwMDUwMDA1MDsvKiBjbGVhciBzdGF0dXMgcmVnaXN0ZXIgKi8KKwkJKmFkZHIgPSAoRlBXKSAweDAwRkYwMEZGOy8qIHJlc2VzdCB0byByZWFkIG1vZGUgKi8KKwl9Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworc3RhdGljIHZvaWQgZmxhc2hfZ2V0X29mZnNldHMgKHVsb25nIGJhc2UsIGZsYXNoX2luZm9fdCAqIGluZm8pCit7CisJaW50IGk7CisJdm9sYXRpbGUgaW50IHI7CSAvKiBnY2MgMy40LjAtMSBzdHJhbmdlbmVzcywgbmVlZCB0byBmb2xsb3cgdXAuKi8KKworCWlmIChpbmZvLT5mbGFzaF9pZCA9PSBGTEFTSF9VTktOT1dOKSB7CisJCXJldHVybjsKKwl9CisKKwlpZiAoKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVkVORE1BU0spID09IEZMQVNIX01BTl9JTlRFTCkgeworCQlmb3IgKGkgPSAwOyBpIDwgaW5mby0+c2VjdG9yX2NvdW50OyBpKyspIHsKKwkJCWlmIChpID4gMjU0KSB7IC8qIDI1NSwyNTYsMjU3LDI1OCAqLworCQkJCXI9aTsKKwkJCQlpbmZvLT5zdGFydFtpXSA9IGJhc2UgKyAoKChyLShpbnQpMjU1KSAqIFNaXzMySykgKyAoMjU1KlBIWVNfRkxBU0hfU0VDVF9TSVpFKSk7CisJCQkJaW5mby0+cHJvdGVjdFtpXSA9IDA7CisJCQl9IGVsc2UgeworCQkJCWluZm8tPnN0YXJ0W2ldID0gYmFzZSArIChpICogUEhZU19GTEFTSF9TRUNUX1NJWkUpOworCQkJCWluZm8tPnByb3RlY3RbaV0gPSAwOworCQkJfQorCQl9CisJfQorfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KK3ZvaWQgZmxhc2hfcHJpbnRfaW5mbyAoZmxhc2hfaW5mb190ICogaW5mbykKK3sKKwlpbnQgaTsKKworCWlmIChpbmZvLT5mbGFzaF9pZCA9PSBGTEFTSF9VTktOT1dOKSB7CisJCXByaW50ZiAoIm1pc3Npbmcgb3IgdW5rbm93biBGTEFTSCB0eXBlXG4iKTsKKwkJcmV0dXJuOworCX0KKworCXN3aXRjaCAoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9WRU5ETUFTSykgeworCWNhc2UgRkxBU0hfTUFOX0lOVEVMOgorCQlwcmludGYgKCJJTlRFTCAiKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRmICgiVW5rbm93biBWZW5kb3IgIik7CisJCWJyZWFrOworCX0KKworCXN3aXRjaCAoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9UWVBFTUFTSykgeworCWNhc2UgRkxBU0hfMjhGMjU2TDE4VDoKKwkJcHJpbnRmICgiRkxBU0ggMjhGMjU2TDE4VFxuIik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ZiAoIlVua25vd24gQ2hpcCBUeXBlXG4iKTsKKwkJYnJlYWs7CisJfQorCisJcHJpbnRmICgiICBTaXplOiAlbGQgTUIgaW4gJWQgU2VjdG9yc1xuIiwKKwkJCWluZm8tPnNpemUgPj4gMjAsIGluZm8tPnNlY3Rvcl9jb3VudCk7CisKKwlwcmludGYgKCIgIFNlY3RvciBTdGFydCBBZGRyZXNzZXM6Iik7CisJZm9yIChpID0gMDsgaSA8IGluZm8tPnNlY3Rvcl9jb3VudDsgKytpKSB7CisJCWlmICgoaSAlIDUpID09IDApCisJCQlwcmludGYgKCJcbiAgICIpOworCQlwcmludGYgKCIgJTA4bFglcyIsCisJCQkJaW5mby0+c3RhcnRbaV0sIGluZm8tPnByb3RlY3RbaV0gPyAiIChSTykiIDogIgkgICAiKTsKKwl9CisJcHJpbnRmICgiXG4iKTsKKwlyZXR1cm47Cit9CisKKy8qCisgKiBUaGUgZm9sbG93aW5nIGNvZGUgY2Fubm90IGJlIHJ1biBmcm9tIEZMQVNIIQorICovCitzdGF0aWMgdWxvbmcgZmxhc2hfZ2V0X3NpemUgKEZQVyAqIGFkZHIsIGZsYXNoX2luZm9fdCAqIGluZm8pCit7CisJdm9sYXRpbGUgRlBXIHZhbHVlOworCS8qIG1iKCk7ICB0aGlzIG9uZSBtYWtlcyBBUk0xMSBlcnIgZ28gYXdheSwgYnV0IEkgd2FudCBpdCA6KSBhcyBhIGd1aWRlIHRvIHByb2JsZW1zICovCisKKwkvKiBXcml0ZSBhdXRvIHNlbGVjdCBjb21tYW5kOiByZWFkIE1hbnVmYWN0dXJlciBJRCAqLworCWFkZHJbMHg1NTU1XSA9IChGUFcpIDB4MDBBQTAwQUE7CisJYWRkclsweDJBQUFdID0gKEZQVykgMHgwMDU1MDA1NTsKKwlhZGRyWzB4NTU1NV0gPSAoRlBXKSAweDAwOTAwMDkwOworCisJbWIgKCk7CisJdmFsdWUgPSBhZGRyWzBdICYgMHhGRjsJLyoganVzdCBsb29raW5nIGZvciA4OSAoODk4OSBpcyBodyBwYXQpKi8KKworCXN3aXRjaCAodmFsdWUpIHsKKworCWNhc2UgKEZQVykgSU5URUxfTUFOVUZBQ1Q6CisJCWluZm8tPmZsYXNoX2lkID0gRkxBU0hfTUFOX0lOVEVMOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWluZm8tPmZsYXNoX2lkID0gRkxBU0hfVU5LTk9XTjsKKwkJaW5mby0+c2VjdG9yX2NvdW50ID0gMDsKKwkJaW5mby0+c2l6ZSA9IDA7CisJCWFkZHJbMF0gPSAoRlBXKSAweDAwRkYwMEZGOwkvKiByZXN0b3JlIHJlYWQgbW9kZSAqLworCQlyZXR1cm4oMCk7CQkgICAvKiBubyBvciB1bmtub3duIGZsYXNoCSovCisJfQorCisJbWIgKCk7CisJdmFsdWUgPSBhZGRyWzFdOwkvKiBkZXZpY2UgSUQgKi8KKwlzd2l0Y2ggKHZhbHVlKSB7CisKKwljYXNlIChGUFcpIChJTlRFTF9JRF8yOEYyNTZMMThUKToJIC8qIDg4MEQgKi8KKwkJaW5mby0+Zmxhc2hfaWQgKz0gRkxBU0hfMjhGMjU2TDE4VDsKKwkJaW5mby0+c2VjdG9yX2NvdW50ID0gMjU5OwkvKjAtMjU4Ki8KKwkJaW5mby0+c2l6ZSA9IFNaXzMyTTsKKwkJYnJlYWs7CQkJLyogPT4gMzIgTUIJKi8KKworCWRlZmF1bHQ6CisJCWluZm8tPmZsYXNoX2lkID0gRkxBU0hfVU5LTk9XTjsKKwkJYnJlYWs7CisJfQorCisJaWYgKGluZm8tPnNlY3Rvcl9jb3VudCA+IENGR19NQVhfRkxBU0hfU0VDVCkgeworCQlwcmludGYgKCIqKiBFUlJPUjogc2VjdG9yIGNvdW50ICVkID4gbWF4ICglZCkgKipcbiIsCisJCQkJaW5mby0+c2VjdG9yX2NvdW50LCBDRkdfTUFYX0ZMQVNIX1NFQ1QpOworCQlpbmZvLT5zZWN0b3JfY291bnQgPSBDRkdfTUFYX0ZMQVNIX1NFQ1Q7CisJfQorCisJYWRkclswXSA9IChGUFcpIDB4MDBGRjAwRkY7CS8qIHJlc3RvcmUgcmVhZCBtb2RlICovCisKKwlyZXR1cm4oaW5mby0+c2l6ZSk7Cit9CisKKworLyogdW5wcm90ZWN0cyBhIHNlY3RvciBmb3Igd3JpdGUgYW5kIGVyYXNlCisgKiBvbiBzb21lIGludGVsIHBhcnRzLCB0aGlzIHVucHJvdGVjdHMgdGhlIGVudGlyZSBjaGlwLCBidXQgaXQKKyAqIHdvbnQgaHVydCB0byBjYWxsIHRoaXMgYWRkaXRpb25hbCB0aW1lcyBwZXIgc2VjdG9yLi4uCisgKi8KK3ZvaWQgZmxhc2hfdW5wcm90ZWN0X3NlY3RvcnMgKEZQV1YgKiBhZGRyKQoreworI2RlZmluZSBQRF9GSU5URUxfV1NNU19SRUFEWV9NQVNLICAgIDB4MDA4MAorCisJKmFkZHIgPSAoRlBXKSAweDAwNTAwMDUwOwkvKiBjbGVhciBzdGF0dXMgcmVnaXN0ZXIgKi8KKworCS8qIHRoaXMgc2VuZHMgdGhlIGNsZWFyIGxvY2sgYml0IGNvbW1hbmQgKi8KKwkqYWRkciA9IChGUFcpIDB4MDA2MDAwNjA7CisJKmFkZHIgPSAoRlBXKSAweDAwRDAwMEQwOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCitpbnQgZmxhc2hfZXJhc2UgKGZsYXNoX2luZm9fdCAqIGluZm8sIGludCBzX2ZpcnN0LCBpbnQgc19sYXN0KQoreworCWludCBwcm90LCBzZWN0OworCXVsb25nIHR5cGUsIHN0YXJ0LCBsYXN0OworCWludCByY29kZSA9IDA7CisjaWZkZWYgQ09ORklHX1VTRV9JUlEKKwlpbnQgaWZsYWc7CisjZW5kaWYKKworCWlmICgoc19maXJzdCA8IDApIHx8IChzX2ZpcnN0ID4gc19sYXN0KSkgeworCQlpZiAoaW5mby0+Zmxhc2hfaWQgPT0gRkxBU0hfVU5LTk9XTikgeworCQkJcHJpbnRmICgiLSBtaXNzaW5nXG4iKTsKKwkJfSBlbHNlIHsKKwkJCXByaW50ZiAoIi0gbm8gc2VjdG9ycyB0byBlcmFzZVxuIik7CisJCX0KKwkJcmV0dXJuIDE7CisJfQorCisJdHlwZSA9IChpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX1ZFTkRNQVNLKTsKKwlpZiAoKHR5cGUgIT0gRkxBU0hfTUFOX0lOVEVMKSkgeworCQlwcmludGYgKCJDYW4ndCBlcmFzZSB1bmtub3duIGZsYXNoIHR5cGUgJTA4bHggLSBhYm9ydGVkXG4iLAorCQkJCWluZm8tPmZsYXNoX2lkKTsKKwkJcmV0dXJuIDE7CisJfQorCisJcHJvdCA9IDA7CisJZm9yIChzZWN0ID0gc19maXJzdDsgc2VjdCA8PSBzX2xhc3Q7ICsrc2VjdCkgeworCQlpZiAoaW5mby0+cHJvdGVjdFtzZWN0XSkgeworCQkJcHJvdCsrOworCQl9CisJfQorCisJaWYgKHByb3QpIHsKKwkJcHJpbnRmICgiLSBXYXJuaW5nOiAlZCBwcm90ZWN0ZWQgc2VjdG9ycyB3aWxsIG5vdCBiZSBlcmFzZWQhXG4iLAorCQkJCXByb3QpOworCX0gZWxzZSB7CisJCXByaW50ZiAoIlxuIik7CisJfQorCisKKwlzdGFydCA9IGdldF90aW1lciAoMCk7CisJbGFzdCA9IHN0YXJ0OworCisjaWZkZWYgQ09ORklHX1VTRV9JUlEKKwkvKiBEaXNhYmxlIGludGVycnVwdHMgd2hpY2ggbWlnaHQgY2F1c2UgYSB0aW1lb3V0IGhlcmUgKi8KKwlpZmxhZyA9IGRpc2FibGVfaW50ZXJydXB0cyAoKTsKKyNlbmRpZgorCisJLyogU3RhcnQgZXJhc2Ugb24gdW5wcm90ZWN0ZWQgc2VjdG9ycyAqLworCWZvciAoc2VjdCA9IHNfZmlyc3Q7IHNlY3QgPD0gc19sYXN0OyBzZWN0KyspIHsKKwkJaWYgKGluZm8tPnByb3RlY3Rbc2VjdF0gPT0gMCkgewkvKiBub3QgcHJvdGVjdGVkICovCisJCQlGUFdWICphZGRyID0gKEZQV1YgKikgKGluZm8tPnN0YXJ0W3NlY3RdKTsKKwkJCUZQVyBzdGF0dXM7CisKKwkJCXByaW50ZiAoIkVyYXNpbmcgc2VjdG9yICUyZCAuLi4gIiwgc2VjdCk7CisKKwkJCWZsYXNoX3VucHJvdGVjdF9zZWN0b3JzIChhZGRyKTsKKworCQkJLyogYXJtIHNpbXBsZSwgbm9uIGludGVycnVwdCBkZXBlbmRlbnQgdGltZXIgKi8KKwkJCXJlc2V0X3RpbWVyX21hc2tlZCAoKTsKKworCQkJKmFkZHIgPSAoRlBXKSAweDAwNTAwMDUwOy8qIGNsZWFyIHN0YXR1cyByZWdpc3RlciAqLworCQkJKmFkZHIgPSAoRlBXKSAweDAwMjAwMDIwOy8qIGVyYXNlIHNldHVwICovCisJCQkqYWRkciA9IChGUFcpIDB4MDBEMDAwRDA7LyogZXJhc2UgY29uZmlybSAqLworCisJCQl3aGlsZSAoKChzdGF0dXMgPQorCQkJCQkgKmFkZHIpICYgKEZQVykgMHgwMDgwMDA4MCkgIT0KKwkJCQkgICAoRlBXKSAweDAwODAwMDgwKSB7CisJCQkJaWYgKGdldF90aW1lcl9tYXNrZWQgKCkgPgorCQkJCQlDRkdfRkxBU0hfRVJBU0VfVE9VVCkgeworCQkJCQlwcmludGYgKCJUaW1lb3V0XG4iKTsKKwkJCQkJLyogc3VzcGVuZCBlcmFzZSAgICAgKi8KKwkJCQkJKmFkZHIgPSAoRlBXKSAweDAwQjAwMEIwOworCQkJCQkvKiByZXNldCB0byByZWFkIG1vZGUgKi8KKwkJCQkJKmFkZHIgPSAoRlBXKSAweDAwRkYwMEZGOworCQkJCQlyY29kZSA9IDE7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKworCQkJLyogY2xlYXIgc3RhdHVzIHJlZ2lzdGVyIGNtZC4JKi8KKwkJCSphZGRyID0gKEZQVykgMHgwMDUwMDA1MDsKKwkJCSphZGRyID0gKEZQVykgMHgwMEZGMDBGRjsvKiByZXNlc3QgdG8gcmVhZCBtb2RlICovCisJCQlwcmludGYgKCIgZG9uZVxuIik7CisJCX0KKwl9CisjaWZkZWYgQ09ORklHX1VTRV9JUlEKKwlpZiAoaWZsYWcpCisJCWVuYWJsZV9pbnRlcnJ1cHRzKCk7CisjZW5kaWYKKworCXJldHVybiByY29kZTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogQ29weSBtZW1vcnkgdG8gZmxhc2gsIHJldHVybnM6CisgKiAwIC0gT0sKKyAqIDEgLSB3cml0ZSB0aW1lb3V0CisgKiAyIC0gRmxhc2ggbm90IGVyYXNlZAorICogNCAtIEZsYXNoIG5vdCBpZGVudGlmaWVkCisgKi8KKworaW50IHdyaXRlX2J1ZmYgKGZsYXNoX2luZm9fdCAqIGluZm8sIHVjaGFyICogc3JjLCB1bG9uZyBhZGRyLCB1bG9uZyBjbnQpCit7CisJdWxvbmcgY3AsIHdwOworCUZQVyBkYXRhOworCWludCBjb3VudCwgaSwgbCwgcmMsIHBvcnRfd2lkdGg7CisKKwlpZiAoaW5mby0+Zmxhc2hfaWQgPT0gRkxBU0hfVU5LTk9XTikgeworCQlyZXR1cm4gNDsKKwl9CisvKiBnZXQgbG93ZXIgd29yZCBhbGlnbmVkIGFkZHJlc3MgKi8KKyNpZmRlZiBGTEFTSF9QT1JUX1dJRFRIMTYKKwl3cCA9IChhZGRyICYgfjEpOworCXBvcnRfd2lkdGggPSAyOworI2Vsc2UKKwl3cCA9IChhZGRyICYgfjMpOworCXBvcnRfd2lkdGggPSA0OworI2VuZGlmCisKKwkvKgorCSAqIGhhbmRsZSB1bmFsaWduZWQgc3RhcnQgYnl0ZXMKKwkgKi8KKwlpZiAoKGwgPSBhZGRyIC0gd3ApICE9IDApIHsKKwkJZGF0YSA9IDA7CisJCWZvciAoaSA9IDAsIGNwID0gd3A7IGkgPCBsOyArK2ksICsrY3ApIHsKKwkJCWRhdGEgPSAoZGF0YSA8PCA4KSB8ICgqKHVjaGFyICopIGNwKTsKKwkJfQorCQlmb3IgKDsgaSA8IHBvcnRfd2lkdGggJiYgY250ID4gMDsgKytpKSB7CisJCQlkYXRhID0gKGRhdGEgPDwgOCkgfCAqc3JjKys7CisJCQktLWNudDsKKwkJCSsrY3A7CisJCX0KKwkJZm9yICg7IGNudCA9PSAwICYmIGkgPCBwb3J0X3dpZHRoOyArK2ksICsrY3ApIHsKKwkJCWRhdGEgPSAoZGF0YSA8PCA4KSB8ICgqKHVjaGFyICopIGNwKTsKKwkJfQorCisJCWlmICgocmMgPSB3cml0ZV9kYXRhIChpbmZvLCB3cCwgU1dBUCAoZGF0YSkpKSAhPSAwKSB7CisJCQlyZXR1cm4ocmMpOworCQl9CisJCXdwICs9IHBvcnRfd2lkdGg7CisJfQorCisJLyoKKwkgKiBoYW5kbGUgd29yZCBhbGlnbmVkIHBhcnQKKwkgKi8KKwljb3VudCA9IDA7CisJd2hpbGUgKGNudCA+PSBwb3J0X3dpZHRoKSB7CisJCWRhdGEgPSAwOworCQlmb3IgKGkgPSAwOyBpIDwgcG9ydF93aWR0aDsgKytpKSB7CisJCQlkYXRhID0gKGRhdGEgPDwgOCkgfCAqc3JjKys7CisJCX0KKwkJaWYgKChyYyA9IHdyaXRlX2RhdGEgKGluZm8sIHdwLCBTV0FQIChkYXRhKSkpICE9IDApIHsKKwkJCXJldHVybihyYyk7CisJCX0KKwkJd3AgKz0gcG9ydF93aWR0aDsKKwkJY250IC09IHBvcnRfd2lkdGg7CisJCWlmIChjb3VudCsrID4gMHg4MDApIHsKKwkJCXNwaW5fd2hlZWwgKCk7CisJCQljb3VudCA9IDA7CisJCX0KKwl9CisKKwlpZiAoY250ID09IDApIHsKKwkJcmV0dXJuKDApOworCX0KKworCS8qCisJICogaGFuZGxlIHVuYWxpZ25lZCB0YWlsIGJ5dGVzCisJICovCisJZGF0YSA9IDA7CisJZm9yIChpID0gMCwgY3AgPSB3cDsgaSA8IHBvcnRfd2lkdGggJiYgY250ID4gMDsgKytpLCArK2NwKSB7CisJCWRhdGEgPSAoZGF0YSA8PCA4KSB8ICpzcmMrKzsKKwkJLS1jbnQ7CisJfQorCWZvciAoOyBpIDwgcG9ydF93aWR0aDsgKytpLCArK2NwKSB7CisJCWRhdGEgPSAoZGF0YSA8PCA4KSB8ICgqKHVjaGFyICopIGNwKTsKKwl9CisKKwlyZXR1cm4od3JpdGVfZGF0YSAoaW5mbywgd3AsIFNXQVAgKGRhdGEpKSk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFdyaXRlIGEgd29yZCBvciBoYWxmd29yZCB0byBGbGFzaCwgcmV0dXJuczoKKyAqIDAgLSBPSworICogMSAtIHdyaXRlIHRpbWVvdXQKKyAqIDIgLSBGbGFzaCBub3QgZXJhc2VkCisgKi8KK3N0YXRpYyBpbnQgd3JpdGVfZGF0YSAoZmxhc2hfaW5mb190ICogaW5mbywgdWxvbmcgZGVzdCwgRlBXIGRhdGEpCit7CisJRlBXViAqYWRkciA9IChGUFdWICopIGRlc3Q7CisJdWxvbmcgc3RhdHVzOworI2lmZGVmIENPTkZJR19VU0VfSVJRCisJaW50IGlmbGFnOworI2VuZGlmCisKKwkvKiBDaGVjayBpZiBGbGFzaCBpcyAoc3VmZmljaWVudGx5KSBlcmFzZWQgKi8KKwlpZiAoKCphZGRyICYgZGF0YSkgIT0gZGF0YSkgeworCQlwcmludGYgKCJub3QgZXJhc2VkIGF0ICUwOGx4ICgleClcbiIsICh1bG9uZykgYWRkciwgKmFkZHIpOworCQlyZXR1cm4oMik7CisJfQorCS8qIERpc2FibGUgaW50ZXJydXB0cyB3aGljaCBtaWdodCBjYXVzZSBhIHRpbWVvdXQgaGVyZSAqLworI2lmZGVmIENPTkZJR19VU0VfSVJRCisJaWZsYWcgPSBkaXNhYmxlX2ludGVycnVwdHMgKCk7CisjZW5kaWYKKwkqYWRkciA9IChGUFcpIDB4MDA0MDAwNDA7CS8qIHdyaXRlIHNldHVwICovCisJKmFkZHIgPSBkYXRhOworCisJLyogYXJtIHNpbXBsZSwgbm9uIGludGVycnVwdCBkZXBlbmRlbnQgdGltZXIgKi8KKwlyZXNldF90aW1lcl9tYXNrZWQgKCk7CisKKwkvKiB3YWl0IHdoaWxlIHBvbGxpbmcgdGhlIHN0YXR1cyByZWdpc3RlciAqLworCXdoaWxlICgoKHN0YXR1cyA9ICphZGRyKSAmIChGUFcpIDB4MDA4MDAwODApICE9IChGUFcpIDB4MDA4MDAwODApIHsKKwkJaWYgKGdldF90aW1lcl9tYXNrZWQgKCkgPiBDRkdfRkxBU0hfV1JJVEVfVE9VVCkgeworCQkJKmFkZHIgPSAoRlBXKSAweDAwRkYwMEZGOwkvKiByZXN0b3JlIHJlYWQgbW9kZSAqLworCQkJcmV0dXJuKDEpOworCQl9CisJfQorCSphZGRyID0gKEZQVykgMHgwMEZGMDBGRjsJLyogcmVzdG9yZSByZWFkIG1vZGUgKi8KKworI2lmZGVmIENPTkZJR19VU0VfSVJRCisJaWYgKGlmbGFnKQorCQllbmFibGVfaW50ZXJydXB0cygpOworI2VuZGlmCisKKwlyZXR1cm4oMCk7Cit9CisKK3ZvaWQgaW5saW5lIHNwaW5fd2hlZWwgKHZvaWQpCit7CisJc3RhdGljIGludCBwID0gMDsKKwlzdGF0aWMgY2hhciB3W10gPSAiXFwvLSI7CisKKwlwcmludGYgKCJcMDEwJWMiLCB3W3BdKTsKKwkoKytwID09IDMpID8gKHAgPSAwKSA6IDA7Cit9CmRpZmYgLS1naXQgYS9ib2FyZC9vbWFwMjQyMGg0L21lbS5jIGIvYm9hcmQvb21hcDI0MjBoNC9tZW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hM2IzNDUzCi0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvb21hcDI0MjBoNC9tZW0uYwpAQCAtMCwwICsxLDMwNiBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwNAorICogVGV4YXMgSW5zdHJ1bWVudHMsIDx3d3cudGkuY29tPgorICogUmljaGFyZCBXb29kcnVmZiA8ci13b29kcnVmZjJAdGkuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9vbWFwMjQyMC5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2JpdHMuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9tdXguaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9tZW0uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9jbG9ja3MuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9zeXNfcHJvdG8uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9zeXNfaW5mby5oPgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBzZGVsYXkoKSAtIHNpbXBsZSBzcGluIGxvb3AuICBXaWxsIGJlIGNvbnN0YW50IHRpbWUgYXMKKyAqICBpdHMgZ2VuZXJhbGx5IHVzZWQgaW4gMTJNSHogYnlwYXNzIGNvbmRpdGlvbnMgb25seS4gIFRoaXMKKyAqICBpcyBuZWNlc3NhcnkgdW50aWwgdGltZXJzIGFyZSBhY2Nlc3NpYmxlLgorICoKKyAqICBub3QgaW5saW5lIHRvIGluY3JlYXNlIGNoYW5jZXMgaXRzIGluIGNhY2hlIHdoZW4gY2FsbGVkCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgc2RlbGF5ICh1bnNpZ25lZCBsb25nIGxvb3BzKQoreworCV9fYXNtX18gdm9sYXRpbGUgKCIxOlxuIgorCQkJCQkgICJzdWJzICUwLCAlMSwgIzFcbiIKKwkJCQkJICAiYm5lIDFiIjoiPXIiIChsb29wcyk6IjAiIChsb29wcykpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBwcmNtX2luaXQoKSAtIGluaXRzIGNsb2NrcyBmb3IgUFJDTSBhcyBkZWZpbmVkIGluIGNsb2Nrcy5oIChjb25maWcgSUkgZGVmYXVsdCkuCisgKiAgIC0tIGNhbGxlZCBmcm9tIFNSQU0sIG9yIEZsYXNoICh1c2luZyB0ZW1wIFNSQU0gc3RhY2spLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgcHJjbV9pbml0KHZvaWQpCit7CisJdTMyIHJldixkaXY7CisjaWZkZWYgQ09ORklHX1BBUlRJQUxfU1JBTQorCXZvaWQgKCpmX2xvY2tfcGxsKSAodTMyLCB1MzIsIHUzMiwgdTMyKTsKKwlleHRlcm4gdm9pZCAqX2VuZF92ZWN0LCAqX3N0YXJ0OworCisJZl9sb2NrX3BsbCA9ICh2b2lkICopKCh1MzIpJl9lbmRfdmVjdCAtICh1MzIpJl9zdGFydCArIFNSQU1fVkVDVF9DT0RFKTsKKyNlbmRpZgorCisJX19yYXdfd3JpdGVsKDAsIENNX0ZDTEtFTjFfQ09SRSk7CSAgIC8qIHN0b3AgYWxsIGNsb2NrcyB0byByZWR1Y2UgcmluZ2luZyAqLworCV9fcmF3X3dyaXRlbCgwLCBDTV9GQ0xLRU4yX0NPUkUpOwkgICAvKiBtYXkgbm90IGJlIG5lY2Vzc2FyeSAqLworCV9fcmF3X3dyaXRlbCgwLCBDTV9JQ0xLRU4xX0NPUkUpOworCV9fcmF3X3dyaXRlbCgwLCBDTV9JQ0xLRU4yX0NPUkUpOworCisJX19yYXdfd3JpdGVsKERQTExfT1VULCBDTV9DTEtTRUwyX1BMTCk7CS8qIHNldCBEUExMIG91dCAqLworCV9fcmF3X3dyaXRlbChNUFVfRElWLCBDTV9DTEtTRUxfTVBVKTsJLyogc2V0IE1QVSBkaXZpZGVyICovCisJX19yYXdfd3JpdGVsKERTUF9ESVYsIENNX0NMS1NFTF9EU1ApOwkvKiBzZXQgZHNwIGFuZCBpdmEgZGl2aWRlcnMgKi8KKwlfX3Jhd193cml0ZWwoR0ZYX0RJViwgQ01fQ0xLU0VMX0dGWCk7CS8qIHNldCBnZnggZGl2aWRlcnMgKi8KKworCXJldiAgPSBnZXRfY3B1X3JldigpOworCWlmIChyZXYgPT0gQ1BVXzI0MjBfRVMxIHx8IHJldiA9PSAgQ1BVXzI0MjJfRVMxKQorCQlkaXYgPSBCVVNfRElWX0VTMTsKKwllbHNlCisJCWRpdgk9IEJVU19ESVY7CisJX19yYXdfd3JpdGVsKGRpdiwgQ01fQ0xLU0VMMV9DT1JFKTsvKiBzZXQgTDMvTDQvVVNCL0Rpc3BsYXkvVmxuYy9TU2kgZGl2aWRlcnMgKi8KKwlzZGVsYXkoMTAwMCk7CisKKyNpZm5kZWYgQ09ORklHX1BBUlRJQUxfU1JBTQorCS8qIElmIHJ1bm5pbmcgZnVsbHkgZnJvbSBTUkFNIHRoaXMgaXMgT0suICBUaGUgRmxhc2ggYnVzIGRyb3BzIG91dCBmb3IganVzdCBhIGxpdHRsZS4KKwkgKiBidXQgdGhlbiBjb21lcyBiYWNrLiAgSWYgcnVubmluZyBmcm9tIEZsYXNoIHRoaXMgc2VxdWVuY2Uga2lsbHMgeW91LCB0aHVzIHlvdSBuZWVkCisJICogdG8gcnVuIGl0IHVzaW5nIENPTkZJR19QQVJUSUFMX1NSQU0uCisJICovCisJX19yYXdfd3JpdGVsKE1PREVfQllQQVNTX0ZBU1QsIENNX0NMS0VOX1BMTCk7IC8qIGdvIHRvIGJ5cGFzcywgZmFzdCByZWxvY2sgKi8KKwl3YWl0X29uX3ZhbHVlKEJJVDB8QklUMSwgQklUMSwgQ01fSURMRVNUX0NLR0VOLCBMREVMQVkpOyAvKiB3YWl0IHRpbGwgaW4gYnlwYXNzICovCisKKwkvKiBzZXQgY2xvY2sgc2VsZWN0aW9uIGFuZCBkcGxsIGRpdmlkZXJzLiAqLworCV9fcmF3X3dyaXRlbChEUExMX1ZBTCwgQ01fQ0xLU0VMMV9QTEwpOwkgLyogc2V0IHBsbCBmb3IgdGFyZ2V0IHJhdGUgKi8KKwlfX3Jhd193cml0ZWwoQ09NTUlUX0RJVklERVJTLCBQUkNNX0NMS0NGR19DVFJMKTsgLyogY29tbWl0IGRpdmlkZXJzICovCisJc2RlbGF5KDEwMDAwKTsKKwlfX3Jhd193cml0ZWwoRFBMTF9MT0NLLCBDTV9DTEtFTl9QTEwpOyAvKiBlbmFibGUgZHBsbCAqLworCXNkZWxheSgxMDAwMCk7CisJd2FpdF9vbl92YWx1ZShCSVQwfEJJVDEsIEJJVDIsIENNX0lETEVTVF9DS0dFTiwgTERFTEFZKTsgIC8qd2FpdCBmb3IgZHBsbCBsb2NrICovCisjZWxzZQorLyogaWYgcnVubmluZyBmcm9tIGZsYXNoLCBuZWVkIHRvIGp1bXAgdG8gc21hbGwgcmVsb2NhdGVkIGNvZGUgYXJlYSBpbiBTUkFNLgorICogVGhpcyBpcyB0aGUgb25seSBzYWZlIHNwb3QgdG8gZG8gY29uZmlndXJhdGlvbnMgZnJvbS4KKyAqLworCSgqZl9sb2NrX3BsbCkoUFJDTV9DTEtDRkdfQ1RSTCwgQ01fQ0xLRU5fUExMLCBEUExMX0xPQ0ssIENNX0lETEVTVF9DS0dFTik7CisjZW5kaWYKKworCV9fcmF3X3dyaXRlbChEUExMX0xPQ0t8QVBMTF9MT0NLLCBDTV9DTEtFTl9QTEwpOyAgIC8qIGVuYWJsZSBhcGxsICovCisJd2FpdF9vbl92YWx1ZShCSVQ4LCBCSVQ4LCBDTV9JRExFU1RfQ0tHRU4sIExERUxBWSk7CS8qIHdhaXQgZm9yIGFwbGwgbG9jayAqLworCXNkZWxheSgxMDAwKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBtZW1pZl9pbml0KCkgLSBpbml0IHRoZSBncG1jIGFuZCBzZHJjCisgKiAgLSBlYXJseSBpbml0IHJvdXRpbmVzLCBjYWxsZWQgZnJvbSBmbGFzaCBvcgorICogIFNSQU0uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIG1lbWlmX2luaXQodm9pZCkKK3sKKwlzZHJjX2luaXQoKTsKKyNpZm5kZWYgQ09ORklHX1BBUlRJQUxfU1JBTSAgLyogZG9uJ3QgaW5pdCBpZiBjYWxsaW5nIGZyb20gZmxhc2ggKi8KKwlncG1jX2luaXQoKTsKKyNlbmRpZgorfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBtZW1fb2soKSAtIHRlc3QgdXNlZCB0byBzZWUgaWYgdGltaW5ncyBhcmUgY29ycmVjdAorICogICAgICAgICAgICAgZm9yIGEgcGFydC4gSGVscHMgaW4gZ3Vzc2luZyB3aGljaCBwYXJ0CisgKiAgICAgICAgICAgICB3ZSBhcmUgY3VycmVudGx5IHVzaW5nLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit1MzIgbWVtX29rKHZvaWQpCit7ICB1MzIgdmFsOworCV9fcmF3X3dyaXRlbCgweDAsT01BUDI0MjBfU0RSQ19DUzArMHg0MDApOyAgLyogY2xlYXIgcG9zIEEgKi8KKwlfX3Jhd193cml0ZWwoMHgxMjM0NTY3OCwgT01BUDI0MjBfU0RSQ19DUzApOy8qIHBhdHRlcm4gdG8gcG9zIEIgKi8KKwl2YWwgPSBfX3Jhd19yZWFkbChPTUFQMjQyMF9TRFJDX0NTMCsweDQwMCk7IC8qIGdldCBwb3MgQSB2YWx1ZSAqLworCWlmICh2YWwgIT0gMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc2VlIGlmIHBvcyBBIHZhbHVlIGNoYW5nZWQqLworCQlyZXR1cm4oMCk7CisJZWxzZQorCQlyZXR1cm4oMSk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIHNkcmNfaW5pdCgpIC0gaW5pdCB0aGUgc2RyYyBjaGlwIHNlbGVjdHMgQ1MwIGFuZCBDUzEKKyAqICAtIGVhcmx5IGluaXQgcm91dGluZXMsIGNhbGxlZCBmcm9tIGZsYXNoIG9yCisgKiAgU1JBTS4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBzZHJjX2luaXQodm9pZCkKK3sKKwkjZGVmaW5lIEVBUkxZX0lOSVQgMQorCWRvX3NkcmNfaW5pdChTRFJDX0NTMF9PU0VULCBFQVJMWV9JTklUKTsgIC8qIG9ubHkgaW5pdCB1cCBmaXJzdCBiYW5rIGhlcmUgKi8KK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGRvX3NkcmNfaW5pdCgpOiBpbml0aWFsaXplIHRoZSBTRFJBTSBmb3IgdXNlLgorICogIC1jYWxsZWQgZnJvbSBsb3cgbGV2ZWwgY29kZSB3aXRoIHN0YWNrIG9ubHkuCisgKiAgLWNvZGUgc2V0cyB1cCBTRFJBTSB0aW1pbmcgYW5kIG11eGluZyBmb3IgMjQyMiBvciAyNDIwLgorICogIC1vcHRpbWFsIHNldHRpbmdzIGNhbiBiZSBwbGFjZWQgaGVyZSwgb3IgcmVkb25lIGFmdGVyIGkyYworICogICAgICBpbnNwZWN0aW9uIG9mIGJvYXJkIGluZm8KKyAqCisgKiAhISEgV2hlbiBFUzEgY29tZXMgb3V0IG5lZWQgdG8gY29uZGl0aW9uYWxpemUgUkZSIHZhbHVlISEhCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgZG9fc2RyY19pbml0KHUzMiBvZmZzZXQsIHUzMiBlYXJseSkKK3sKKwl1MzIgY3B1LCBidWc9MCwgcmV2LCBzaGFyZWQ9MCwgY3MwPTAsIHBtYXNrPTAsZmlyc3Q9MTsKKwlzZHJjX2RhdGFfdCAqc2RhdGE7CSAvKiBkbyBub3QgY2hhbmdlIHR5cGUgKi8KKworCXN0YXRpYyBjb25zdCBzZHJjX2RhdGFfdCBzZHJjXzI0MjIgPQorCXsKKwkJSDRfMjQyMl9TRFJDX1NIQVJJTkcsIEg0XzI0MjJfU0RSQ19NRENGR18wLCBINF8yNDIyX1NEUkNfQUNUSU1fQ1RSTEFfMCwKKwkJSDRfMjQyMl9TRFJDX0FDVElNX0NUUkxCXzAsIEg0XzI0MjJfU0RSQ19SRlJfQ1RSTF9FUzEsIEg0XzI0MjJfU0RSQ19NUl8wLAorCQlINF8yNDIyX1NEUkNfRExMQV9DVFJMLCBINF8yNDIyX1NEUkNfRExMQl9DVFJMCisJfTsKKwlzdGF0aWMgY29uc3Qgc2RyY19kYXRhX3Qgc2RyY18yNDIwID0KKwl7CisJCUg0XzI0MjBfU0RSQ19TSEFSSU5HLCBINF8yNDIwX1NEUkNfTURDRkdfMCwgSDRfMjQyMF9TRFJDX0FDVElNX0NUUkxBXzAsCisJCUg0XzI0MjBfU0RSQ19BQ1RJTV9DVFJMQl8wLCBINF8yNDIwX1NEUkNfUkZSX0NUUkxfRVMxLCBINF8yNDIwX1NEUkNfTVJfMCwKKwkJSDRfMjQyMF9TRFJDX0RMTEFfQ1RSTCwgSDRfMjQyMF9TRFJDX0RMTEJfQ1RSTAorCX07CisKKwlpZiAob2Zmc2V0ID09IFNEUkNfQ1MwX09TRVQpCisJCWNzMCA9IHNoYXJlZCA9IDE7ICAvKiBpbnQgcmVncyBzaGFyZWQgYmV0d2VlbiBib3RoIGNoaXAgc2VsZWN0ICovCisKKwljcHUgPSBnZXRfY3B1X3R5cGUoKTsKKworCS8qIHdhcm5pbmcgZ2VuZXJhdGVkLCB0aG91Z2ggY29kZSBnZW5lcmF0aW9uIGlzIGNvcnJlY3QuIHRoaXMgbWF5IGJpdGUgbGF0ZXIsIGJ1dCBpcyBvayBmb3Igbm93LgorCSAqICB0aGVyZSBpcyBvbmx5IHNvIG11Y2ggQyBjb2RlIHlvdSBjYW4gZG8gb24gc3RhY2sgb25seSBvcGVyYXRpb24uCisJICovCisJaWYgKGNwdSA9PSBDUFVfMjQyMikKKwkJc2RhdGEgPSAmc2RyY18yNDIyOworCWVsc2UKKwkJc2RhdGEgPSAmc2RyY18yNDIwOworCV9fYXNtX18gX192b2xhdGlsZV9fKCIiOiA6IDoibWVtb3J5Iik7CisjaWZkZWYgQ09ORklHX1BBUlRJQUxfU1JBTQorCS8qIHUtYm9vdCBpcyBjb21waWxlZCB0byBydW4gaW4gRERSIGF0IDh4eHh4eHh4LiAgSWYgd2UgdXNlIGRhdGEgaGVyZSB3aGljaCBpcyBub3QgcGMgcmVsYXRpdmUKKwkgKiB3ZSBuZWVkIHRvIGdldCB0aGUgYWRkcmVzcyBjb3JyZWN0LiAgV2UgbmVlZCB0byBmaW5kIHRoZSBjdXJyZW50IGZsYXNoIG1hcHBpbmcgdG8gZHJlc3MgdXAKKwkgKiB0aGUgaW5pdGlhbCBwb2ludGVyIGxvYWQuICBBcyBsb25nIGFzIHRoaXMgaXMgY29uc3QgZGF0YSB3ZSBzaG91bGQgYmUgb2suCisJICovCisJaWYoZWFybHkpCisJCXNkYXRhID0gKHNkcmNfZGF0YV90ICopKCgodTMyKXNkYXRhICYgMHgwMDAzRkZGRikgfCBnZXRfZ3BtYzBfYmFzZSgpKTsKKyNlbmRpZgorCisJbWVuX2NvbWJvOgorCisJaWYgKCFlYXJseSAmJiBnZXRfbWVtX3R5cGUoKSA9PSBERFJfQ09NQk8pIHsgLyogY29tYm8gcGFydCBoYXMgYSBzaGFyZWQgQ0tFIHNpZ25hbCwgY2FuJ3QgdXNlIGZlYXR1cmUgKi8KKwkJcG1hc2sgPSBCSVQyOworCQlmaXJzdCA9IDA7CS8qIHRyaWdnZXIgZGRyX2NvbWJvIGluaXQgKi8KKwl9CisKKwlpZiAoc2hhcmVkKSB7CisJCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChTTVNfU1lTQ09ORklHKXxTTUFSVF9JRExFLCBTTVNfU1lTQ09ORklHKTsKKwkJX19yYXdfd3JpdGVsKFNNQVJUX0lETEV8U09GVFJFU0VULCBTRFJDX1NZU0NPTkZJRyk7CS8qIHJlc2V0IHNkcmMgKi8KKwkJd2FpdF9vbl92YWx1ZShCSVQwLCBCSVQwLCBTRFJDX1NUQVRVUywgMTIwMDAwMDApOwkvKiB3YWl0IHRpbGwgcmVzZXQgZG9uZSBzZXQgKi8KKwkJX19yYXdfd3JpdGVsKFNNQVJUX0lETEUsIFNEUkNfU1lTQ09ORklHKTsJCS8qIGNsZWFyIHNvZnQgcmVzZXQgKi8KKwkJX19yYXdfd3JpdGVsKHNkYXRhLT5zZHJjX3NoYXJpbmcsIFNEUkNfU0hBUklORyk7CisJCV9fcmF3X3dyaXRlbCgoX19yYXdfcmVhZGwoU0RSQ19QT1dFUil8U01BUlRfSURMRSkgJiB+cG1hc2ssIFNEUkNfUE9XRVIpOworCX0KKwlpZiAoZmlyc3QpCisJCV9fcmF3X3dyaXRlbChzZGF0YS0+c2RyY19tZGNmZ18wLCBTRFJDX01DRkdfMCtvZmZzZXQpOworCWVsc2UgeworCQlfX3Jhd193cml0ZWwoKF9fcmF3X3JlYWRsKFNEUkNfUE9XRVIpfFNNQVJUX0lETEUpICYgfnBtYXNrLCBTRFJDX1BPV0VSKTsKKwkJX19yYXdfd3JpdGVsKEg0XzI0MjBfQ09NQk9fTURDRkdfMCxTRFJDX01DRkdfMCtvZmZzZXQpOworCX0KKworCWlmIChjczApIHsKKwkJX19yYXdfd3JpdGVsKHNkYXRhLT5zZHJjX2FjdGltX2N0cmxhXzAsIFNEUkNfQUNUSU1fQ1RSTEFfMCk7CisJCV9fcmF3X3dyaXRlbChzZGF0YS0+c2RyY19hY3RpbV9jdHJsYl8wLCBTRFJDX0FDVElNX0NUUkxCXzApOworCX0gZWxzZSB7CisJCV9fcmF3X3dyaXRlbChzZGF0YS0+c2RyY19hY3RpbV9jdHJsYV8wLCBTRFJDX0FDVElNX0NUUkxBXzEpOworCQlfX3Jhd193cml0ZWwoc2RhdGEtPnNkcmNfYWN0aW1fY3RybGJfMCwgU0RSQ19BQ1RJTV9DVFJMQl8xKTsKKwl9CisKKwlfX3Jhd193cml0ZWwoc2RhdGEtPnNkcmNfcmZyX2N0cmwsIFNEUkNfUkZSX0NUUkwrb2Zmc2V0KTsKKworCS8qIGluaXQgc2VxdWVuY2UgZm9yIF9tRERSXyB1c2luZyBtYW51YWwgY29tbWFuZHMgKEREUiBpcyBhIGJpdCBkaWZmZXJlbnQpICovCisJX19yYXdfd3JpdGVsKENNRF9OT1AsIFNEUkNfTUFOVUFMXzArb2Zmc2V0KTsKKwlzZGVsYXkoNTAwMCk7ICAvKiBzdXNwb3NlZCB0byBiZSAxMDB1cyBwZXIgZGVzaWduIHNwZWMgZm9yIG1kZHIqLworCV9fcmF3X3dyaXRlbChDTURfUFJFQ0hBUkdFLCBTRFJDX01BTlVBTF8wK29mZnNldCk7CisJX19yYXdfd3JpdGVsKENNRF9BVVRPUkVGUkVTSCwgU0RSQ19NQU5VQUxfMCtvZmZzZXQpOworCV9fcmF3X3dyaXRlbChDTURfQVVUT1JFRlJFU0gsIFNEUkNfTUFOVUFMXzArb2Zmc2V0KTsKKworCS8qCisJICogQ1N4IFNEUkMgTW9kZSBSZWdpc3RlcgorCSAqIEJ1cnN0IGxlbmd0aCA9IDQgLSBERFIgbWVtb3J5CisJICogU2VyaWFsIG1vZGUKKwkgKiBDQVMgbGF0ZW5jeSA9IHgKKwkgKi8KKwlfX3Jhd193cml0ZWwoc2RhdGEtPnNkcmNfbXJfMCwgU0RSQ19NUl8wK29mZnNldCk7CisKKwkvKiBOT1RFOiBFUzEgMjQyeCBfQlVHXyBETEwgKi8KKwlyZXYgID0gZ2V0X2NwdV9yZXYoKTsKKwlpZiAocmV2ID09IENQVV8yNDIwX0VTMSB8fCByZXYgPT0gIENQVV8yNDIyX0VTMSkKKwkJYnVnID0gQklUMDsKKwkvKiBlbmFibGUgJiBsb2FkIHVwIERMTCB3aXRoIGdvb2QgdmFsdWUgZm9yIDc1TUh6LCBhbmQgc2V0IHBoYXNlIHRvIDkwJSAqLworCWlmIChzaGFyZWQpIHsKKwkJX19yYXdfd3JpdGVsKHNkYXRhLT5zZHJjX2RsbGFfY3RybCwgU0RSQ19ETExBX0NUUkwpOworCQlfX3Jhd193cml0ZWwoc2RhdGEtPnNkcmNfZGxsYV9jdHJsICYgfihCSVQyfGJ1ZyksIFNEUkNfRExMQV9DVFJMKTsKKwkJX19yYXdfd3JpdGVsKHNkYXRhLT5zZHJjX2RsbGJfY3RybCwgU0RSQ19ETExCX0NUUkwpOworCQlfX3Jhd193cml0ZWwoc2RhdGEtPnNkcmNfZGxsYl9jdHJsICYgfihCSVQyfGJ1ZykgLCBTRFJDX0RMTEJfQ1RSTCk7CisJfQorCXNkZWxheSg5MDAwKTsKKwlpZiAoIWZpcnN0IHx8IG1lbV9vaygpKQkvKiBwYXNzZWQgdGVzdCBvciAybmQgYmFuayBpbml0ICovCisJCXJldHVybjsKKwllbHNlIHsKKwkJZmlyc3QgPSAwOworCQlnb3RvIG1lbl9jb21ibzsKKwl9Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBncG1jX2luaXQoKTogaW5pdCBncG1jIGJ1cworICogSW5pdCBHUE1DIGZvciB4MTYsIE11eE1vZGUgKFNEUkFNIGluIHgzMikuCisgKiBUaGlzIGNvZGUgY2FuIG9ubHkgYmUgZXhlY3V0ZWQgZnJvbSBTUkFNIG9yIFNEUkFNLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBncG1jX2luaXQodm9pZCkKK3sKKwl1MzIgbXV4PTAsIG10eXBlLCBtd2lkdGg7CisKKwkvKiBnbG9iYWwgc2V0dGluZ3MgKi8KKwlfX3Jhd193cml0ZWwoMHgxMCwgR1BNQ19TWVNDT05GSUcpOwkvKiBzbWFydCBpZGxlICovCisJX19yYXdfd3JpdGVsKDB4MCwgR1BNQ19JUlFFTkFCTEUpOwkvKiBpc3IncyBzb3VyY2VzIG1hc2tlZCAqLworCV9fcmF3X3dyaXRlbCgweDEsIEdQTUNfVElNRU9VVF9DT05UUk9MKTsvKiB0aW1lb3V0IGRpc2FibGUgKi8KKwlfX3Jhd193cml0ZWwoMHgxMTEsIEdQTUNfQ09ORklHKTsJLyogc2V0IG5XUCwgZGlzYWJsZSBsaW1pdGVkIGFkZHIgKi8KKworCS8qIGRpc2NvdmVyIGJ1cyBjb25uZWN0aW9uIGZyb20gc3lzYm9vdCAqLworCWlmIChpc19ncG1jX211eGVkKCkgPT0gR1BNQ19NVVhFRCkKKwkJbXV4ID0gQklUOTsKKwltdHlwZSA9IGdldF9ncG1jMF90eXBlKCk7CisJbXdpZHRoID0gZ2V0X2dwbWMwX3dpZHRoKCk7CisKKwkvKiBzZXR1cCBjczAgKi8KKwlfX3Jhd193cml0ZWwoMHgwLCBHUE1DX0NPTkZJRzdfMCk7CS8qIGRpc2FibGUgY3VycmVudCBtYXAgKi8KKwlzZGVsYXkoMTAwMCk7CisJX19yYXdfd3JpdGVsKEg0XzI0WFhfR1BNQ19DT05GSUcxXzB8bXV4fG10eXBlfG13aWR0aCwgR1BNQ19DT05GSUcxXzApOworCS8vX19yYXdfd3JpdGVsKEg0XzI0WFhfR1BNQ19DT05GSUcyXzAsIEdQTUNfQ09ORklHMl8wKTsKKwlfX3Jhd193cml0ZWwoSDRfMjRYWF9HUE1DX0NPTkZJRzNfMCwgR1BNQ19DT05GSUczXzApOworCV9fcmF3X3dyaXRlbChINF8yNFhYX0dQTUNfQ09ORklHNF8wLCBHUE1DX0NPTkZJRzRfMCk7CisJLy9fX3Jhd193cml0ZWwoSDRfMjRYWF9HUE1DX0NPTkZJRzVfMCwgR1BNQ19DT05GSUc1XzApOworCV9fcmF3X3dyaXRlbChINF8yNFhYX0dQTUNfQ09ORklHN18wLCBHUE1DX0NPTkZJRzdfMCk7LyogZW5hYmxlIG5ldyBtYXBwaW5nICovCisJc2RlbGF5KDIwMDApOworCisJLyogc2V0dXAgY3MxICovCisJX19yYXdfd3JpdGVsKDAsIEdQTUNfQ09ORklHN18xKTsgLyogZGlzYWJsZSBhbnkgbWFwcGluZyAqLworCXNkZWxheSgxMDAwKTsKKwlfX3Jhd193cml0ZWwoSDRfMjRYWF9HUE1DX0NPTkZJRzFfMXxtdXgsIEdQTUNfQ09ORklHMV8xKTsKKwlfX3Jhd193cml0ZWwoSDRfMjRYWF9HUE1DX0NPTkZJRzJfMSwgR1BNQ19DT05GSUcyXzEpOworCV9fcmF3X3dyaXRlbChINF8yNFhYX0dQTUNfQ09ORklHM18xLCBHUE1DX0NPTkZJRzNfMSk7CisJX19yYXdfd3JpdGVsKEg0XzI0WFhfR1BNQ19DT05GSUc0XzEsIEdQTUNfQ09ORklHNF8xKTsKKwlfX3Jhd193cml0ZWwoSDRfMjRYWF9HUE1DX0NPTkZJRzVfMSwgR1BNQ19DT05GSUc1XzEpOworCV9fcmF3X3dyaXRlbChINF8yNFhYX0dQTUNfQ09ORklHNl8xLCBHUE1DX0NPTkZJRzZfMSk7CisJX19yYXdfd3JpdGVsKEg0XzI0WFhfR1BNQ19DT05GSUc3XzEsIEdQTUNfQ09ORklHN18xKTsgLyogZW5hYmxlIG1hcHBpbmcgKi8KKwlzZGVsYXkoMjAwMCk7Cit9CisKZGlmZiAtLWdpdCBhL2JvYXJkL29tYXAyNDIwaDQvb21hcDI0MjBoNC5jIGIvYm9hcmQvb21hcDI0MjBoNC9vbWFwMjQyMGg0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDY5NmE3MQotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL29tYXAyNDIwaDQvb21hcDI0MjBoNC5jCkBAIC0wLDAgKzEsODM0IEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDA0CisgKiBUZXhhcyBJbnN0cnVtZW50cywgPHd3dy50aS5jb20+CisgKiBSaWNoYXJkIFdvb2RydWZmIDxyLXdvb2RydWZmMkB0aS5jb20+CisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9vbWFwMjQyMC5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2JpdHMuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9tdXguaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9zeXNfcHJvdG8uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9zeXNfaW5mby5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL21lbS5oPgorI2luY2x1ZGUgPGkyYy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisKK3N0YXRpYyB2b2lkIHdhaXRfZm9yX2NvbW1hbmRfY29tcGxldGUodW5zaWduZWQgaW50IHdkX2Jhc2UpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUm91dGluZTogZGVsYXkKKyAqIERlc2NyaXB0aW9uOiBzcGlubmluZyBkZWxheSB0byB1c2UgYmVmb3JlIHVkZWxheSB3b3JrcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBkZWxheSAodW5zaWduZWQgbG9uZyBsb29wcykKK3sKKwlfX2FzbV9fIHZvbGF0aWxlICgiMTpcbiIKKwkJCQkJICAic3VicyAlMCwgJTEsICMxXG4iCisJCQkJCSAgImJuZSAxYiI6Ij1yIiAobG9vcHMpOiIwIiAobG9vcHMpKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSb3V0aW5lOiBib2FyZF9pbml0CisgKiBEZXNjcmlwdGlvbjogRWFybHkgaGFyZHdhcmUgaW5pdC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludCBib2FyZF9pbml0ICh2b2lkKQoreworCURFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOworI2lmbmRlZiBDT05GSUdfUEFSVElBTF9TUkFNCisJc19pbml0KDB4MCk7ICAvKiBmdWxsIHNyYW0gYnVpbGQsIG5ldmVyIHNraXAgY2xvY2sgYW5kIHNkcmMsIG5vIHBvaW50ICovCisjZWxzZQorCWdwbWNfaW5pdCgpOworI2VuZGlmCisJZ2QtPmJkLT5iaV9hcmNoX251bWJlciA9IE1BQ0hfVFlQRV9PTUFQX0g0OwkJLyogYm9hcmQgaWQgZm9yIGxpbnV4ICovCisJZ2QtPmJkLT5iaV9ib290X3BhcmFtcyA9IChPTUFQMjQyMF9TRFJDX0NTMCsweDEwMCk7CS8qIGFkcmVzcyBvZiBib290IHBhcmFtZXRlcnMgKi8KKworCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUm91dGluZTogc19pbml0CisgKiBEZXNjcmlwdGlvbjogRG9lcyBlYXJseSBzeXN0ZW0gaW5pdCBvZiBtdXhpbmcgYW5kIGNsb2Nrcy4KKyAqIC0gQ2FsbGVkIGF0IHRpbWUgd2hlbiBvbmx5IHN0YWNrIGlzIGF2YWlsYWJsZS4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBzX2luaXQoaW50IHNraXApCit7CisJd2F0Y2hkb2dfaW5pdCgpOworCXNldF9tdXhjb25mX3JlZ3MoKTsKKwlkZWxheSgxMDApOworCisJaWYgKCFza2lwKQorCQlwcmNtX2luaXQoKTsKKworCXBlcmlwaGVyYWxfZW5hYmxlKCk7CisJaWNhY2hlX2VuYWJsZSgpOworI2lmbmRlZiBDT05GSUdfQVBUSVgKKwlpZiAoIXNraXApCisJCW1lbWlmX2luaXQoKTsKKyNlbmRpZgorfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUm91dGluZTogbWlzY19pbml0X3IKKyAqIERlc2NyaXB0aW9uOiBJbml0IGV0aGVybmV0IChkb25lIGhlcmUgc28gdWRlbGF5IHdvcmtzKQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW50IG1pc2NfaW5pdF9yICh2b2lkKQoreworCWV0aGVyX2luaXQoKTsgLyogYmV0dGVyIGRvbmUgaGVyZSBzbyB0aW1lcnMgYXJlIGluaXQnZWQgKi8KKwlyZXR1cm4oMCk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSb3V0aW5lOiB3YXRjaGRvZ19pbml0CisgKiBEZXNjcmlwdGlvbjogU2h1dCBkb3duIHdhdGNoIGRvZ3MKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgd2F0Y2hkb2dfaW5pdCh2b2lkKQoreworCWludCBtb2RlOworI2RlZmluZSBHUCAoQklUOHxCSVQ5KQorCisJLyogVGhlcmUgYXJlIDQgd2F0Y2ggZG9ncy4gIDEgc2VjdXJlLCBhbmQgMyBnZW5lcmFsIHB1cnBvc2UuCisJICogSSB3b3VsZCBleHBlY3QgdGhhdCB0aGUgUk9NIHRha2VzIGNhcmUgb2YgdGhlIHNlY3VyZSBvbmUsCisJICogYnV0IHdlIHdpbGwgdHJ5IGFsc28uICBPZiB0aGUgMyBHUCBvbmVzLCAxIGNhbiByZXNldCB1cworCSAqIGRpcmVjdGx5LCB0aGUgb3RoZXIgMiBvbmx5IGdlbmVyYXRlIE1QVSBpbnRlcnJ1cHRzLgorCSAqLworCW1vZGUgPSAoX19yYXdfcmVhZGwoQ09OVFJPTF9TVEFUVVMpICYgKEJJVDh8QklUOSkpOworCWlmIChtb2RlID09IEdQKSB7CisJCV9fcmF3X3dyaXRlbChXRF9VTkxPQ0sxICxXRDFfQkFTRStXU1BSKTsKKwkJd2FpdF9mb3JfY29tbWFuZF9jb21wbGV0ZShXRDFfQkFTRSk7CisJCV9fcmF3X3dyaXRlbChXRF9VTkxPQ0syICxXRDFfQkFTRStXU1BSKTsKKwl9CisJX19yYXdfd3JpdGVsKFdEX1VOTE9DSzEgLFdEMl9CQVNFK1dTUFIpOworCXdhaXRfZm9yX2NvbW1hbmRfY29tcGxldGUoV0QyX0JBU0UpOworCV9fcmF3X3dyaXRlbChXRF9VTkxPQ0syICxXRDJfQkFTRStXU1BSKTsKKworI2lmIE1QVV9XRF9DTE9DS0VEIC8qIHZhbHVlIDB4MTAgc3RpY2sgb24gYXB0aXgsIEJJVDQgcG9sYXJpdHkgc2VlbXMgb3Bwc2l0ZSovCisJX19yYXdfd3JpdGVsKFdEX1VOTE9DSzEgLFdEM19CQVNFK1dTUFIpOworCXdhaXRfZm9yX2NvbW1hbmRfY29tcGxldGUoV0QzX0JBU0UpOworCV9fcmF3X3dyaXRlbChXRF9VTkxPQ0syICxXRDNfQkFTRStXU1BSKTsKKworCV9fcmF3X3dyaXRlbChXRF9VTkxPQ0sxICxXRDRfQkFTRStXU1BSKTsKKwl3YWl0X2Zvcl9jb21tYW5kX2NvbXBsZXRlKFdENF9CQVNFKTsKKwlfX3Jhd193cml0ZWwoV0RfVU5MT0NLMiAsV0Q0X0JBU0UrV1NQUik7CisjZW5kaWYKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUm91dGluZTogd2FpdF9mb3JfY29tbWFuZF9jb21wbGV0ZQorICogRGVzY3JpcHRpb246IFdhaXQgZm9yIHBvc3RpbmcgdG8gZmluaXNoIG9uIHdhdGNoZG9nCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQgd2FpdF9mb3JfY29tbWFuZF9jb21wbGV0ZSh1bnNpZ25lZCBpbnQgd2RfYmFzZSkKK3sKKwlpbnQgcGVuZGluZyA9IDE7CisJZG8geworCQlwZW5kaW5nID0gX19yYXdfcmVhZGwod2RfYmFzZStXV1BTKTsKKwl9IHdoaWxlIChwZW5kaW5nKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJvdXRpbmU6ZXRoZXJfaW5pdAorICogRGVzY3JpcHRpb246IHRha2UgdGhlIEV0aGVybmV0IGNvbnRyb2xsZXIgb3V0IG9mIHJlc2V0IGFuZCB3YWl0CisgKiAgCQkgICBmb3IgdGhlIEVFUFJPTSBsb2FkIHRvIGNvbXBsZXRlLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgZXRoZXJfaW5pdCAodm9pZCkKK3sKKyNpZmRlZiBDT05GSUdfRFJJVkVSX0xBTjkxQzk2CisJaW50IGNudCA9IDIwOworCisJX19yYXdfd3JpdGV3KDB4MCwgTEFOX1JFU0VUX1JFR0lTVEVSKTsKKwlkbyB7CisJCV9fcmF3X3dyaXRldygweDEsIExBTl9SRVNFVF9SRUdJU1RFUik7CisJCXVkZWxheSAoMTAwKTsKKwkJaWYgKGNudCA9PSAwKQorCQkJZ290byBoNHJlc2V0X2Vycl9vdXQ7CisJCS0tY250OworCX0gd2hpbGUgKF9fcmF3X3JlYWR3KExBTl9SRVNFVF9SRUdJU1RFUikgIT0gMHgxKTsKKworCWNudCA9IDIwOworCisJZG8geworCQlfX3Jhd193cml0ZXcoMHgwLCBMQU5fUkVTRVRfUkVHSVNURVIpOworCQl1ZGVsYXkgKDEwMCk7CisJCWlmIChjbnQgPT0gMCkKKwkJCWdvdG8gaDRyZXNldF9lcnJfb3V0OworCQktLWNudDsKKwl9IHdoaWxlIChfX3Jhd19yZWFkdyhMQU5fUkVTRVRfUkVHSVNURVIpICE9IDB4MDAwMCk7CisJdWRlbGF5ICgxMDAwKTsKKworCSooKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikgRVRIX0NPTlRST0xfUkVHKSAmPSB+MHgwMTsKKwl1ZGVsYXkgKDEwMDApOworCisJaDRyZXNldF9lcnJfb3V0OgorCXJldHVybjsKKyNlbmRpZgorfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUm91dGluZTogZHJhbV9pbml0CisgKiBEZXNjcmlwdGlvbjogc2V0cyB1Ym9vdHMgaWRlYSBvZiBzZHJhbSBzaXplCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludCBkcmFtX2luaXQgKHZvaWQpCit7CisJREVDTEFSRV9HTE9CQUxfREFUQV9QVFI7CisJdW5zaWduZWQgaW50IHNpemUwPTAsc2l6ZTE9MDsKKwl1MzIgbXR5cGUsIGJ0eXBlOworI2RlZmluZSBOT1RfRUFSTFkgMAorCisJaTJjX2luaXQgKENGR19JMkNfU1BFRUQsIENGR19JMkNfU0xBVkUpOyAvKiBuZWVkIHRoaXMgYSBiaXQgZWFybHkgKi8KKworCWJ0eXBlID0gZ2V0X2JvYXJkX3R5cGUoKTsKKwltdHlwZSA9IGdldF9tZW1fdHlwZSgpOworCisJZGlzcGxheV9ib2FyZF9pbmZvKGJ0eXBlKTsKKwlpZiAoYnR5cGUgPT0gQk9BUkRfSDRfTUVORUxBVVMpCisJCXVwZGF0ZV9tdXgoYnR5cGUsbXR5cGUpOworCisJaWYgKChtdHlwZSA9PSBERFJfQ09NQk8pIHx8IChtdHlwZSA9PSBERFJfU1RBQ0tFRCkpIHsKKwkJZG9fc2RyY19pbml0KFNEUkNfQ1MxX09TRVQsIE5PVF9FQVJMWSk7CS8qIGluaXQgb3RoZXIgY2hpcCBzZWxlY3QgKi8KKwkJc2l6ZTAgPSBzaXplMSA9IFNaXzMyTTsKKwl9IGVsc2UKKwkJc2l6ZTAgPSBTWl82NE07CisKKwlnZC0+YmQtPmJpX2RyYW1bMF0uc3RhcnQgPSBQSFlTX1NEUkFNXzE7CisJZ2QtPmJkLT5iaV9kcmFtWzBdLnNpemUgPSBzaXplMDsKKwlnZC0+YmQtPmJpX2RyYW1bMV0uc3RhcnQgPSBQSFlTX1NEUkFNXzI7CisJZ2QtPmJkLT5iaV9kcmFtWzFdLnNpemUgPSBzaXplMTsKKworCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUm91dGluZTogc2V0X211eGNvbmZfcmVncworICogRGVzY3JpcHRpb246IFNldHRpbmcgdXAgdGhlIGNvbmZpZ3VyYXRpb24gTXV4IHJlZ2lzdGVycworICogICAgICAgICAgICAgIHNwZWNpZmljIHRvIHRoZSBoYXJkd2FyZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgc2V0X211eGNvbmZfcmVncyAodm9pZCkKK3sKKwltdXhTZXR1cFNEUkMoKTsKKwltdXhTZXR1cEdQTUMoKTsKKwltdXhTZXR1cFVzYjAoKTsKKwltdXhTZXR1cFVhcnQzKCk7CisJbXV4U2V0dXBJMkMxKCk7CisJbXV4U2V0dXBVQVJUMSgpOworCW11eFNldHVwTENEKCk7CisJbXV4U2V0dXBDYW1lcmEoKTsKKwltdXhTZXR1cE1NQ1NEKCk7CisJbXV4U2V0dXBUb3VjaFNjcmVlbigpOworCW11eFNldHVwSERRKCk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUm91dGluZTogcGVyaXBoZXJhbF9lbmFibGUKKyAqIERlc2NyaXB0aW9uOiBFbmFibGUgdGhlIGNsa3MgJiBwb3dlciBmb3IgcGVyaWZzIChHUFQyLCBVQVJUMSwuLi4pCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBwZXJpcGhlcmFsX2VuYWJsZSh2b2lkKQoreworCXVuc2lnbmVkIGludCB2LCBpZl9jbGtzPTAsIGZ1bmNfY2xrcz0wOworCisJLyogRW5hYmxlIEdQMiB0aW1lci4qLworCWlmX2Nsa3MgfD0gQklUNDsKKwlmdW5jX2Nsa3MgfD0gQklUNDsKKwl2ID0gX19yYXdfcmVhZGwoQ01fQ0xLU0VMMl9DT1JFKSB8IDB4NDsJLyogU3lzX2NsayBpbnB1dCBPTUFQMjQyMF9HUFQyICovCisJX19yYXdfd3JpdGVsKHYsIENNX0NMS1NFTDJfQ09SRSk7CisJX19yYXdfd3JpdGVsKDB4MSwgQ01fQ0xLU0VMX1dLVVApOworCisjaWZkZWYgQ0ZHX05TMTY1NTAKKwkvKiBFbmFibGUgVUFSVDEgY2xvY2sgKi8KKwlmdW5jX2Nsa3MgfD0gQklUMjE7CisJaWZfY2xrcyB8PSBCSVQyMTsKKyNlbmRpZgorCXYgPSBfX3Jhd19yZWFkbChDTV9JQ0xLRU4xX0NPUkUpIHwgaWZfY2xrczsJLyogSW50ZXJmYWNlIGNsb2NrcyBvbiAqLworCV9fcmF3X3dyaXRlbCh2LENNX0lDTEtFTjFfQ09SRSApOworCXYgPSBfX3Jhd19yZWFkbChDTV9GQ0xLRU4xX0NPUkUpIHwgZnVuY19jbGtzOyAvKiBGdW5jdGlvbmFsIENsb2NrcyBvbiAqLworCV9fcmF3X3dyaXRlbCh2LCBDTV9GQ0xLRU4xX0NPUkUpOworCWRlbGF5KDEwMDApOworCisjaWZuZGVmIEtFUk5FTF9VUERBVEVECisJeworI2RlZmluZSBWMSAweGZmZmZmZmZmCisjZGVmaW5lIFYyIDB4MDAwMDAwMDcKKworCQlfX3Jhd193cml0ZWwoVjEsIENNX0ZDTEtFTjFfQ09SRSk7CisJCV9fcmF3X3dyaXRlbChWMiwgQ01fRkNMS0VOMl9DT1JFKTsKKwkJX19yYXdfd3JpdGVsKFYxLCBDTV9JQ0xLRU4xX0NPUkUpOworCQlfX3Jhd193cml0ZWwoVjEsIENNX0lDTEtFTjJfQ09SRSk7CisJfQorI2VuZGlmCit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSb3V0aW5lOiBtdXhTZXR1cFVzYjAgICAob3N0Ym9vdCkKKyAqIERlc2NyaXB0aW9uOiBTZXR1cCB1c2IgbXV4aW5nCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIG11eFNldHVwVXNiMCh2b2lkKQoreworCXZvbGF0aWxlIHVpbnQ4ICAgKk11eENvbmZpZ1JlZzsKKwl2b2xhdGlsZSB1aW50MzIgICpvdGdDdHJsUmVnOworCisJTXV4Q29uZmlnUmVnID0gKHZvbGF0aWxlIHVpbnQ4ICopQ09OVFJPTF9QQURDT05GX1VTQjBfUFVFTjsKKwkqTXV4Q29uZmlnUmVnICY9ICh1aW50OCkofjB4MUYpOworCisJTXV4Q29uZmlnUmVnID0gKHZvbGF0aWxlIHVpbnQ4ICopQ09OVFJPTF9QQURDT05GX1VTQjBfVlA7CisJKk11eENvbmZpZ1JlZyAmPSAodWludDgpKH4weDFGKTsKKworCU11eENvbmZpZ1JlZyA9ICh2b2xhdGlsZSB1aW50OCAqKUNPTlRST0xfUEFEQ09ORl9VU0IwX1ZNOworCSpNdXhDb25maWdSZWcgJj0gKHVpbnQ4KSh+MHgxRik7CisKKwlNdXhDb25maWdSZWcgPSAodm9sYXRpbGUgdWludDggKilDT05UUk9MX1BBRENPTkZfVVNCMF9SQ1Y7CisJKk11eENvbmZpZ1JlZyAmPSAodWludDgpKH4weDFGKTsKKworCU11eENvbmZpZ1JlZyA9ICh2b2xhdGlsZSB1aW50OCAqKUNPTlRST0xfUEFEQ09ORl9VU0IwX1RYRU47CisJKk11eENvbmZpZ1JlZyAmPSAodWludDgpKH4weDFGKTsKKworCU11eENvbmZpZ1JlZyA9ICh2b2xhdGlsZSB1aW50OCAqKUNPTlRST0xfUEFEQ09ORl9VU0IwX1NFMDsKKwkqTXV4Q29uZmlnUmVnICY9ICh1aW50OCkofjB4MUYpOworCisJTXV4Q29uZmlnUmVnID0gKHZvbGF0aWxlIHVpbnQ4ICopQ09OVFJPTF9QQURDT05GX1VTQjBfREFUOworCSpNdXhDb25maWdSZWcgJj0gKHVpbnQ4KSh+MHgxRik7CisKKwkvKiBzZXR1cCBmb3IgVVNCIFZCdXMgZGV0ZWN0aW9uICovCisJb3RnQ3RybFJlZyA9ICh2b2xhdGlsZSB1aW50MzIgKilVU0JfT1RHX0NUUkw7CisJKm90Z0N0cmxSZWcgfD0gMHgwMDA0MDAwMDsgLyogYml0IDE4ICovCit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSb3V0aW5lOiBtdXhTZXR1cFVhcnQzICAgKG9zdGJvb3QpCisgKiBEZXNjcmlwdGlvbjogU2V0dXAgdWFydDMgbXV4aW5nCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIG11eFNldHVwVWFydDModm9pZCkKK3sKKwl2b2xhdGlsZSB1aW50OCAqTXV4Q29uZmlnUmVnOworCisJTXV4Q29uZmlnUmVnID0gKHZvbGF0aWxlIHVpbnQ4ICopQ09OVFJPTF9QQURDT05GX1VBUlQzX1RYX0lSVFg7CisJKk11eENvbmZpZ1JlZyAmPSAodWludDgpKH4weDFGKTsKKworCU11eENvbmZpZ1JlZyA9ICh2b2xhdGlsZSB1aW50OCAqKUNPTlRST0xfUEFEQ09ORl9VQVJUM19SWF9JUlJYOworCSpNdXhDb25maWdSZWcgJj0gKHVpbnQ4KSh+MHgxRik7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSb3V0aW5lOiBtdXhTZXR1cEkyQzEgICAob3N0Ym9vdCkKKyAqIERlc2NyaXB0aW9uOiBTZXR1cCBpMmMgbXV4aW5nCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIG11eFNldHVwSTJDMSh2b2lkKQoreworCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgICpNdXhDb25maWdSZWc7CisKKwkvKiBJMkMxIENsb2NrIHBpbiBjb25maWd1cmF0aW9uLCBQSU4gPSBNMTkgKi8KKwlNdXhDb25maWdSZWcgPSAodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKUNPTlRST0xfUEFEQ09ORl9JMkMxX1NDTDsKKwkqTXV4Q29uZmlnUmVnID0gMHgwMCA7IC8vIE1vZGUgPSAwLCBQVVBEPURpc2FibGVkCisKKwkvKiBJMkMxIERhdGEgcGluIGNvbmZpZ3VyYXRpb24sIFBJTiA9IEwxNSAqLworCU11eENvbmZpZ1JlZyA9ICh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopQ09OVFJPTF9QQURDT05GX0kyQzFfU0RBOworCSpNdXhDb25maWdSZWcgPSAweDAwIDsgLy8gTW9kZSA9IDAsIFBVUEQ9RGlzYWJsZWQKKworCS8qIFB1bGwtdXAgcmVxdWlyZWQgb24gZGF0YSBsaW5lICovCisJLyogZXh0ZXJuYWwgcHVsbC11cCBhbHJlYWR5IHByZXNlbnQuICovCisJLyogKk11eENvbmZpZ1JlZyB8PSAweDE4IDsqLyAvKiBNb2RlID0gMCwgUHVsbFR5cGVTZWw9UFUsIFB1bGxVREVuYWJsZT1FbmFibGVkICovCit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSb3V0aW5lOiBtdXhTZXR1cFVBUlQxICAob3N0Ym9vdCkKKyAqIERlc2NyaXB0aW9uOiBTZXQgdXAgdWFydDEgbXV4aW5nCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIG11eFNldHVwVUFSVDEodm9pZCkKK3sKKwl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICAqTXV4Q29uZmlnUmVnOworCisJLyogVUFSVDFfQ1RTIHBpbiBjb25maWd1cmF0aW9uLCBQSU4gPSBEMjEgKi8KKwlNdXhDb25maWdSZWcgPSAodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKUNPTlRST0xfUEFEQ09ORl9VQVJUMV9DVFM7CisJKk11eENvbmZpZ1JlZyA9IDB4MDAgOyAvKiBNb2RlID0gMCwgUFVQRD1EaXNhYmxlZCAqLworCisJLyogVUFSVDFfUlRTIHBpbiBjb25maWd1cmF0aW9uLCBQSU4gPSBIMjEgKi8KKwlNdXhDb25maWdSZWcgPSAodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKUNPTlRST0xfUEFEQ09ORl9VQVJUMV9SVFM7CisJKk11eENvbmZpZ1JlZyA9IDB4MDAgOyAvKiBNb2RlID0gMCwgUFVQRD1EaXNhYmxlZCAqLworCisJLyogVUFSVDFfVFggcGluIGNvbmZpZ3VyYXRpb24sIFBJTiA9IEwyMCAqLworCU11eENvbmZpZ1JlZyA9ICh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopQ09OVFJPTF9QQURDT05GX1VBUlQxX1RYOworCSpNdXhDb25maWdSZWcgPSAweDAwIDsgLyogTW9kZSA9IDAsIFBVUEQ9RGlzYWJsZWQgKi8KKworCS8qIFVBUlQxX1JYIHBpbiBjb25maWd1cmF0aW9uLCBQSU4gPSBUMjEgKi8KKwlNdXhDb25maWdSZWcgPSAodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKUNPTlRST0xfUEFEQ09ORl9VQVJUMV9SWDsKKwkqTXV4Q29uZmlnUmVnID0gMHgwMCA7IC8qIE1vZGUgPSAwLCBQVVBEPURpc2FibGVkICovCit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSb3V0aW5lOiBtdXhTZXR1cExDRCAgIChvc3Rib290KQorICogRGVzY3JpcHRpb246IFNldHVwIGxjZCBtdXhpbmcKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgbXV4U2V0dXBMQ0Qodm9pZCkKK3sKKwl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICAqTXV4Q29uZmlnUmVnOworCisJLyogTENEX0QwIHBpbiBjb25maWd1cmF0aW9uLCBQSU4gPSBZNyAgKi8KKwlNdXhDb25maWdSZWcgPSAodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKUNPTlRST0xfUEFEQ09ORl9EU1NfRDA7CisJKk11eENvbmZpZ1JlZyA9IDB4MDAgOyAvLyBNb2RlID0gMCwgUFVQRD1EaXNhYmxlZAorCisJLyogTENEX0QxIHBpbiBjb25maWd1cmF0aW9uLCBQSU4gPSBQMTAgKi8KKwlNdXhDb25maWdSZWcgPSAodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKUNPTlRST0xfUEFEQ09ORl9EU1NfRDE7CisJKk11eENvbmZpZ1JlZyA9IDB4MDAgOyAvLyBNb2RlID0gMCwgUFVQRD1EaXNhYmxlZAorCisJLyogTENEX0QyIHBpbiBjb25maWd1cmF0aW9uLCBQSU4gPSBWOCAgKi8KKwlNdXhDb25maWdSZWcgPSAodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKUNPTlRST0xfUEFEQ09ORl9EU1NfRDI7CisJKk11eENvbmZpZ1JlZyA9IDB4MDAgOyAvLyBNb2RlID0gMCwgUFVQRD1EaXNhYmxlZAorCisJLyogTENEX0QzIHBpbiBjb25maWd1cmF0aW9uLCBQSU4gPSBZOCAgKi8KKwlNdXhDb25maWdSZWcgPSAodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKUNPTlRST0xfUEFEQ09ORl9EU1NfRDM7CisJKk11eENvbmZpZ1JlZyA9IDB4MDAgOyAvLyBNb2RlID0gMCwgUFVQRD1EaXNhYmxlZAorCisJLyogTENEX0Q0IHBpbiBjb25maWd1cmF0aW9uLCBQSU4gPSBXOCAgKi8KKwlNdXhDb25maWdSZWcgPSAodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKUNPTlRST0xfUEFEQ09ORl9EU1NfRDQ7CisJKk11eENvbmZpZ1JlZyA9IDB4MDAgOyAvLyBNb2RlID0gMCwgUFVQRD1EaXNhYmxlZAorCisJLyogTENEX0Q1IHBpbiBjb25maWd1cmF0aW9uLCBQSU4gPSBSMTAgKi8KKwlNdXhDb25maWdSZWcgPSAodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKUNPTlRST0xfUEFEQ09ORl9EU1NfRDU7CisJKk11eENvbmZpZ1JlZyA9IDB4MDAgOyAvLyBNb2RlID0gMCwgUFVQRD1EaXNhYmxlZAorCisJLyogTENEX0Q2IHBpbiBjb25maWd1cmF0aW9uLCBQSU4gPSBZOSAgKi8KKwlNdXhDb25maWdSZWcgPSAodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKUNPTlRST0xfUEFEQ09ORl9EU1NfRDY7CisJKk11eENvbmZpZ1JlZyA9IDB4MDAgOyAvLyBNb2RlID0gMCwgUFVQRD1EaXNhYmxlZAorCisJLyogTENEX0Q3IHBpbiBjb25maWd1cmF0aW9uLCBQSU4gPSBWOSAgKi8KKwlNdXhDb25maWdSZWcgPSAodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKUNPTlRST0xfUEFEQ09ORl9EU1NfRDc7CisJKk11eENvbmZpZ1JlZyA9IDB4MDAgOyAvLyBNb2RlID0gMCwgUFVQRD1EaXNhYmxlZAorCisJLyogTENEX0Q4IHBpbiBjb25maWd1cmF0aW9uLCBQSU4gPSBXOSAgKi8KKwlNdXhDb25maWdSZWcgPSAodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKUNPTlRST0xfUEFEQ09ORl9EU1NfRDg7CisJKk11eENvbmZpZ1JlZyA9IDB4MDAgOyAvLyBNb2RlID0gMCwgUFVQRD1EaXNhYmxlZAorCisJLyogTENEX0Q5IHBpbiBjb25maWd1cmF0aW9uLCBQSU4gPSBQMTEgKi8KKwlNdXhDb25maWdSZWcgPSAodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKUNPTlRST0xfUEFEQ09ORl9EU1NfRDk7CisJKk11eENvbmZpZ1JlZyA9IDB4MDAgOyAvLyBNb2RlID0gMCwgUFVQRD1EaXNhYmxlZAorCisJLyogTENEX0QxMCBwaW4gY29uZmlndXJhdGlvbiwgUElOID0gVjEwICovCisJTXV4Q29uZmlnUmVnID0gKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKilDT05UUk9MX1BBRENPTkZfRFNTX0QxMDsKKwkqTXV4Q29uZmlnUmVnID0gMHgwMCA7IC8vIE1vZGUgPSAwLCBQVVBEPURpc2FibGVkCisKKwkvKiBMQ0RfRDExIHBpbiBjb25maWd1cmF0aW9uLCBQSU4gPSBZMTAgKi8KKwlNdXhDb25maWdSZWcgPSAodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKUNPTlRST0xfUEFEQ09ORl9EU1NfRDExOworCSpNdXhDb25maWdSZWcgPSAweDAwIDsgLy8gTW9kZSA9IDAsIFBVUEQ9RGlzYWJsZWQKKworCS8qIExDRF9EMTIgcGluIGNvbmZpZ3VyYXRpb24sIFBJTiA9IFcxMCAqLworCU11eENvbmZpZ1JlZyA9ICh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopQ09OVFJPTF9QQURDT05GX0RTU19EMTI7CisJKk11eENvbmZpZ1JlZyA9IDB4MDAgOyAvLyBNb2RlID0gMCwgUFVQRD1EaXNhYmxlZAorCisJLyogTENEX0QxMyBwaW4gY29uZmlndXJhdGlvbiwgUElOID0gUjExICovCisJTXV4Q29uZmlnUmVnID0gKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKilDT05UUk9MX1BBRENPTkZfRFNTX0QxMzsKKwkqTXV4Q29uZmlnUmVnID0gMHgwMCA7IC8vIE1vZGUgPSAwLCBQVVBEPURpc2FibGVkCisKKwkvKiBMQ0RfRDE0IHBpbiBjb25maWd1cmF0aW9uLCBQSU4gPSBWMTEgKi8KKwlNdXhDb25maWdSZWcgPSAodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKUNPTlRST0xfUEFEQ09ORl9EU1NfRDE0OworCSpNdXhDb25maWdSZWcgPSAweDAwIDsgLy8gTW9kZSA9IDAsIFBVUEQ9RGlzYWJsZWQKKworCS8qIExDRF9EMTUgcGluIGNvbmZpZ3VyYXRpb24sIFBJTiA9IFcxMSAqLworCU11eENvbmZpZ1JlZyA9ICh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopQ09OVFJPTF9QQURDT05GX0RTU19EMTU7CisJKk11eENvbmZpZ1JlZyA9IDB4MDAgOyAvLyBNb2RlID0gMCwgUFVQRD1EaXNhYmxlZAorCisJLyogTENEX0QxNiBwaW4gY29uZmlndXJhdGlvbiwgUElOID0gUDEyICovCisJTXV4Q29uZmlnUmVnID0gKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKilDT05UUk9MX1BBRENPTkZfRFNTX0QxNjsKKwkqTXV4Q29uZmlnUmVnID0gMHgwMCA7IC8vIE1vZGUgPSAwLCBQVVBEPURpc2FibGVkCisKKwkvKiBMQ0RfRDE3IHBpbiBjb25maWd1cmF0aW9uLCBQSU4gPSBSMTIgKi8KKwlNdXhDb25maWdSZWcgPSAodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKUNPTlRST0xfUEFEQ09ORl9EU1NfRDE3OworCSpNdXhDb25maWdSZWcgPSAweDAwIDsgLy8gTW9kZSA9IDAsIFBVUEQ9RGlzYWJsZWQKKworCS8qIExDRF9QQ0xLIHBpbiBjb25maWd1cmF0aW9uLCAgIFBJTiA9IFc2ICAgKi8KKwlNdXhDb25maWdSZWcgPSAodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKUNPTlRST0xfUEFEQ09ORl9EU1NfUENMSzsKKwkqTXV4Q29uZmlnUmVnID0gMHgwMCA7IC8vIE1vZGUgPSAwLCBQVVBEPURpc2FibGVkCisKKwkvKiBMQ0RfVlNZTkMgcGluIGNvbmZpZ3VyYXRpb24sICBQSU4gPSBWNyAgKi8KKwlNdXhDb25maWdSZWcgPSAodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKUNPTlRST0xfUEFEQ09ORl9EU1NfVlNZTkM7CisJKk11eENvbmZpZ1JlZyA9IDB4MDAgOyAvLyBNb2RlID0gMCwgUFVQRD1EaXNhYmxlZAorCisJLyogTENEX0hTWU5DIHBpbiBjb25maWd1cmF0aW9uLCAgUElOID0gWTYgICovCisJTXV4Q29uZmlnUmVnID0gKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKilDT05UUk9MX1BBRENPTkZfRFNTX0hTWU5DOworCSpNdXhDb25maWdSZWcgPSAweDAwIDsgLy8gTW9kZSA9IDAsIFBVUEQ9RGlzYWJsZWQKKworCS8qIExDRF9BQ0JJQVMgcGluIGNvbmZpZ3VyYXRpb24sIFBJTiA9IFc3ICovCisJTXV4Q29uZmlnUmVnID0gKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKilDT05UUk9MX1BBRENPTkZfRFNTX0FDQklBUzsKKwkqTXV4Q29uZmlnUmVnID0gMHgwMCA7IC8vIE1vZGUgPSAwLCBQVVBEPURpc2FibGVkCit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSb3V0aW5lOiBtdXhTZXR1cENhbWVyYSAgKG9zdGJvb3QpCisgKiBEZXNjcmlwdGlvbjogU2V0dXAgY2FtZXJhIG11eGluZworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBtdXhTZXR1cENhbWVyYSh2b2lkKQoreworCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgICpNdXhDb25maWdSZWc7CisKKwkvKiBDQU1FUkFfUlNUWiAgcGluIGNvbmZpZ3VyYXRpb24sIFBJTiA9IFkxNiAqLworCS8qIENBTV9SU1QgaXMgY29ubmVjdGVkIHRocm91Z2ggdGhlIEkyQyBJTyBleHBhbmRlci4qLworCS8qIE11eENvbmZpZ1JlZyA9ICh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopLCBDT05UUk9MX1BBRENPTkZfU1lTX05SRVNXQVJNKi8KKwkvKiAqTXV4Q29uZmlnUmVnID0gMHgwMCA7IC8vIE1vZGUgPSAwLCBQVVBEPURpc2FibGVkICAgKi8KKworCS8qIENBTUVSQV9YQ0xLICBwaW4gY29uZmlndXJhdGlvbiwgUElOID0gVTMgKi8KKwlNdXhDb25maWdSZWcgPSAodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKUNPTlRST0xfUEFEQ09ORl9DQU1fWENMSzsKKwkqTXV4Q29uZmlnUmVnID0gMHgwMCA7IC8vIE1vZGUgPSAwLCBQVVBEPURpc2FibGVkCisKKwkvKiBDQU1FUkFfTENMSyAgcGluIGNvbmZpZ3VyYXRpb24sIFBJTiA9IFY1ICovCisJTXV4Q29uZmlnUmVnID0gKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKilDT05UUk9MX1BBRENPTkZfQ0FNX0xDTEs7CisJKk11eENvbmZpZ1JlZyA9IDB4MDAgOyAvLyBNb2RlID0gMCwgUFVQRD1EaXNhYmxlZAorCisJLyogQ0FNRVJBX1ZTWU5DIHBpbiBjb25maWd1cmF0aW9uLCBQSU4gPSBVMiAqLworCU11eENvbmZpZ1JlZyA9ICh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopQ09OVFJPTF9QQURDT05GX0NBTV9WUywKKwkJCQkgICAqTXV4Q29uZmlnUmVnID0gMHgwMCA7IC8vIE1vZGUgPSAwLCBQVVBEPURpc2FibGVkCisKKwkvKiBDQU1FUkFfSFNZTkMgcGluIGNvbmZpZ3VyYXRpb24sIFBJTiA9IFQzICovCisJTXV4Q29uZmlnUmVnID0gKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKilDT05UUk9MX1BBRENPTkZfQ0FNX0hTLAorCQkJCSAgICpNdXhDb25maWdSZWcgPSAweDAwIDsgLy8gTW9kZSA9IDAsIFBVUEQ9RGlzYWJsZWQKKworCS8qIENBTUVSQV9EQVQwIHBpbiBjb25maWd1cmF0aW9uLCBQSU4gPSBUNCAqLworCU11eENvbmZpZ1JlZyA9ICh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopQ09OVFJPTF9QQURDT05GX0NBTV9EMCwKKwkJCQkgICAqTXV4Q29uZmlnUmVnID0gMHgwMCA7IC8vIE1vZGUgPSAwLCBQVVBEPURpc2FibGVkCisKKwkvKiBDQU1FUkFfREFUMSBwaW4gY29uZmlndXJhdGlvbiwgUElOID0gVjIgKi8KKwlNdXhDb25maWdSZWcgPSAodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKUNPTlRST0xfUEFEQ09ORl9DQU1fRDEsCisJCQkJICAgKk11eENvbmZpZ1JlZyA9IDB4MDAgOyAvLyBNb2RlID0gMCwgUFVQRD1EaXNhYmxlZAorCisJLyogQ0FNRVJBX0RBVDIgcGluIGNvbmZpZ3VyYXRpb24sIFBJTiA9IFYzICovCisJTXV4Q29uZmlnUmVnID0gKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKilDT05UUk9MX1BBRENPTkZfQ0FNX0QyLAorCQkJCSAgICpNdXhDb25maWdSZWcgPSAweDAwIDsgLy8gTW9kZSA9IDAsIFBVUEQ9RGlzYWJsZWQKKworCS8qIENBTUVSQV9EQVQzIHBpbiBjb25maWd1cmF0aW9uLCBQSU4gPSBVNCAqLworCU11eENvbmZpZ1JlZyA9ICh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopQ09OVFJPTF9QQURDT05GX0NBTV9EMywKKwkJCQkgICAqTXV4Q29uZmlnUmVnID0gMHgwMCA7IC8vIE1vZGUgPSAwLCBQVVBEPURpc2FibGVkCisKKwkvKiBDQU1FUkFfREFUNCBwaW4gY29uZmlndXJhdGlvbiwgUElOID0gVzIgKi8KKwlNdXhDb25maWdSZWcgPSAodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKUNPTlRST0xfUEFEQ09ORl9DQU1fRDQsCisJCQkJICAgKk11eENvbmZpZ1JlZyA9IDB4MDAgOyAvLyBNb2RlID0gMCwgUFVQRD1EaXNhYmxlZAorCisJLyogQ0FNRVJBX0RBVDUgcGluIGNvbmZpZ3VyYXRpb24sIFBJTiA9IFY0ICovCisJTXV4Q29uZmlnUmVnID0gKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKilDT05UUk9MX1BBRENPTkZfQ0FNX0Q1LAorCQkJCSAgICpNdXhDb25maWdSZWcgPSAweDAwIDsgLy8gTW9kZSA9IDAsIFBVUEQ9RGlzYWJsZWQKKworCS8qIENBTUVSQV9EQVQ2IHBpbiBjb25maWd1cmF0aW9uLCBQSU4gPSBXMyAqLworCU11eENvbmZpZ1JlZyA9ICh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopQ09OVFJPTF9QQURDT05GX0NBTV9ENiwKKwkJCQkgICAqTXV4Q29uZmlnUmVnID0gMHgwMCA7IC8vIE1vZGUgPSAwLCBQVVBEPURpc2FibGVkCisKKwkvKiBDQU1FUkFfREFUNyBwaW4gY29uZmlndXJhdGlvbiwgUElOID0gWTIgKi8KKwlNdXhDb25maWdSZWcgPSAodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKUNPTlRST0xfUEFEQ09ORl9DQU1fRDcsCisJCQkJICAgKk11eENvbmZpZ1JlZyA9IDB4MDAgOyAvLyBNb2RlID0gMCwgUFVQRD1EaXNhYmxlZAorCisJLyogQ0FNRVJBX0RBVDggcGluIGNvbmZpZ3VyYXRpb24sIFBJTiA9IFk0ICovCisJTXV4Q29uZmlnUmVnID0gKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKilDT05UUk9MX1BBRENPTkZfQ0FNX0Q4LAorCQkJCSAgICpNdXhDb25maWdSZWcgPSAweDAwIDsgLy8gTW9kZSA9IDAsIFBVUEQ9RGlzYWJsZWQKKworCS8qIENBTUVSQV9EQVQ5IHBpbiBjb25maWd1cmF0aW9uLCBQSU4gPSBWNiAqLworCU11eENvbmZpZ1JlZyA9ICh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopQ09OVFJPTF9QQURDT05GX0NBTV9EOSwKKwkJCQkgICAqTXV4Q29uZmlnUmVnID0gMHgwMCA7IC8vIE1vZGUgPSAwLCBQVVBEPURpc2FibGVkCit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSb3V0aW5lOiBtdXhTZXR1cE1NQ1NEIChvc3Rib290KQorICogRGVzY3JpcHRpb246IHNldCB1cCBNTUMgbXV4aW5nCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIG11eFNldHVwTU1DU0Qodm9pZCkKK3sKKwl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICAqTXV4Q29uZmlnUmVnOworCisJLyogU0RNTUNfQ0xLSSBwaW4gY29uZmlndXJhdGlvbiwgIFBJTiA9IEgxNSAqLworCU11eENvbmZpZ1JlZyA9ICh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopQ09OVFJPTF9QQURDT05GX01NQ19DTEtJLAorCQkJCSAgICpNdXhDb25maWdSZWcgPSAweDAwIDsgLy8gTW9kZSA9IDAsIFBVUEQ9RGlzYWJsZWQKKworCS8qIFNETU1DX0NMS08gcGluIGNvbmZpZ3VyYXRpb24sICBQSU4gPSBHMTkgKi8KKwlNdXhDb25maWdSZWcgPSAodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKUNPTlRST0xfUEFEQ09ORl9NTUNfQ0xLTywKKwkJCQkgICAqTXV4Q29uZmlnUmVnID0gMHgwMCA7IC8vIE1vZGUgPSAwLCBQVVBEPURpc2FibGVkCisKKwkvKiBTRE1NQ19DTUQgcGluIGNvbmZpZ3VyYXRpb24sICAgUElOID0gSDE4ICovCisJTXV4Q29uZmlnUmVnID0gKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKilDT05UUk9MX1BBRENPTkZfTU1DX0NNRCwKKwkJCQkgICAqTXV4Q29uZmlnUmVnID0gMHgwMCA7IC8vIE1vZGUgPSAwLCBQVVBEPURpc2FibGVkCisJLy8gRXh0ZXJuYWwgcHVsbC11cHMgYXJlIHByZXNlbnQuCisJLy8gKk11eENvbmZpZ1JlZyB8PSAweDE4IDsgLy8gUHVsbFVERW5hYmxlPUVuYWJsZWQsIFB1bGxUeXBlU2VsPVBVCisKKwkvKiBTRE1NQ19EQVQwIHBpbiBjb25maWd1cmF0aW9uLCAgUElOID0gRjIwICovCisJTXV4Q29uZmlnUmVnID0gKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKilDT05UUk9MX1BBRENPTkZfTU1DX0RBVDAsCisJCQkJICAgKk11eENvbmZpZ1JlZyA9IDB4MDAgOyAvLyBNb2RlID0gMCwgUFVQRD1EaXNhYmxlZAorCS8vIEV4dGVybmFsIHB1bGwtdXBzIGFyZSBwcmVzZW50LgorCS8vICpNdXhDb25maWdSZWcgfD0gMHgxOCA7IC8vIFB1bGxVREVuYWJsZT1FbmFibGVkLCBQdWxsVHlwZVNlbD1QVQorCisJLyogU0RNTUNfREFUMSBwaW4gY29uZmlndXJhdGlvbiwgIFBJTiA9IEgxNCAqLworCU11eENvbmZpZ1JlZyA9ICh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopQ09OVFJPTF9QQURDT05GX01NQ19EQVQxLAorCQkJCSAgICpNdXhDb25maWdSZWcgPSAweDAwIDsgLy8gTW9kZSA9IDAsIFBVUEQ9RGlzYWJsZWQKKwkvLyBFeHRlcm5hbCBwdWxsLXVwcyBhcmUgcHJlc2VudC4KKwkvLyAqTXV4Q29uZmlnUmVnIHw9IDB4MTggOyAvLyBQdWxsVURFbmFibGU9RW5hYmxlZCwgUHVsbFR5cGVTZWw9UFUKKworCS8qIFNETU1DX0RBVDIgcGluIGNvbmZpZ3VyYXRpb24sICBQSU4gPSBFMTkgKi8KKwlNdXhDb25maWdSZWcgPSAodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKUNPTlRST0xfUEFEQ09ORl9NTUNfREFUMiwKKwkJCQkgICAqTXV4Q29uZmlnUmVnID0gMHgwMCA7IC8vIE1vZGUgPSAwLCBQVVBEPURpc2FibGVkCisJLy8gRXh0ZXJuYWwgcHVsbC11cHMgYXJlIHByZXNlbnQuCisJLy8gKk11eENvbmZpZ1JlZyB8PSAweDE4IDsgLy8gUHVsbFVERW5hYmxlPUVuYWJsZWQsIFB1bGxUeXBlU2VsPVBVCisKKwkvKiBTRE1NQ19EQVQzIHBpbiBjb25maWd1cmF0aW9uLCAgUElOID0gRDE5ICovCisJTXV4Q29uZmlnUmVnID0gKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKilDT05UUk9MX1BBRENPTkZfTU1DX0RBVDMsCisJCQkJICAgKk11eENvbmZpZ1JlZyA9IDB4MDAgOyAvLyBNb2RlID0gMCwgUFVQRD1EaXNhYmxlZAorCS8vIEV4dGVybmFsIHB1bGwtdXBzIGFyZSBwcmVzZW50LgorCS8vICpNdXhDb25maWdSZWcgfD0gMHgxOCA7IC8vIFB1bGxVREVuYWJsZT1FbmFibGVkLCBQdWxsVHlwZVNlbD1QVQorCisJLyogU0RNTUNfRERJUjAgcGluIGNvbmZpZ3VyYXRpb24sIFBJTiA9IEYxOSAqLworCU11eENvbmZpZ1JlZyA9ICh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopQ09OVFJPTF9QQURDT05GX01NQ19EQVRfRElSMCwKKwkJCQkgICAqTXV4Q29uZmlnUmVnID0gMHgwMCA7IC8vIE1vZGUgPSAwLCBQVVBEPURpc2FibGVkCisKKwkvKiBTRE1NQ19ERElSMSBwaW4gY29uZmlndXJhdGlvbiwgUElOID0gRTIwICovCisJTXV4Q29uZmlnUmVnID0gKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKilDT05UUk9MX1BBRENPTkZfTU1DX0RBVF9ESVIxLAorCQkJCSAgICpNdXhDb25maWdSZWcgPSAweDAwIDsgLy8gTW9kZSA9IDAsIFBVUEQ9RGlzYWJsZWQKKworCS8qIFNETU1DX0RESVIyIHBpbiBjb25maWd1cmF0aW9uLCBQSU4gPSBGMTggKi8KKwlNdXhDb25maWdSZWcgPSAodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKUNPTlRST0xfUEFEQ09ORl9NTUNfREFUX0RJUjIsCisJCQkJICAgKk11eENvbmZpZ1JlZyA9IDB4MDAgOyAvLyBNb2RlID0gMCwgUFVQRD1EaXNhYmxlZAorCisJLyogU0RNTUNfRERJUjMgcGluIGNvbmZpZ3VyYXRpb24sIFBJTiA9IEUxOCAqLworCU11eENvbmZpZ1JlZyA9ICh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopQ09OVFJPTF9QQURDT05GX01NQ19EQVRfRElSMywKKwkJCQkgICAqTXV4Q29uZmlnUmVnID0gMHgwMCA7IC8vIE1vZGUgPSAwLCBQVVBEPURpc2FibGVkCisKKwkvKiBTRE1NQ19DRElSIHBpbiBjb25maWd1cmF0aW9uLCAgUElOID0gRzE4ICovCisJTXV4Q29uZmlnUmVnID0gKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKilDT05UUk9MX1BBRENPTkZfTU1DX0NNRF9ESVIsCisJCQkJICAgKk11eENvbmZpZ1JlZyA9IDB4MDAgOyAvLyBNb2RlID0gMCwgUFVQRD1EaXNhYmxlZAorCisJLyogTU1DX0NEIHBpbiBjb25maWd1cmF0aW9uLCAgICAgIFBJTiA9IEIzICAtLS0yNDIwSVAgT05MWS0tLSovCisJLyogTU1DX0NEIGZvciAyNDIySVA9SzEgKi8KKwlNdXhDb25maWdSZWcgPSAodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKUNPTlRST0xfUEFEQ09ORl9TRFJDX0ExNCwKKwkJCQkgICAqTXV4Q29uZmlnUmVnID0gMHgwMyA7IC8vIE1vZGUgPSAzLCBQVVBEPURpc2FibGVkCisKKwkvKiBNTUNfV1AgcGluIGNvbmZpZ3VyYXRpb24sICAgICAgUElOID0gQjQgICovCisJTXV4Q29uZmlnUmVnID0gKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKilDT05UUk9MX1BBRENPTkZfU0RSQ19BMTMsCisJCQkJICAgKk11eENvbmZpZ1JlZyA9IDB4MDMgOyAvLyBNb2RlID0gMywgUFVQRD1EaXNhYmxlZAorfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSb3V0aW5lOiBtdXhTZXR1cFRvdWNoU2NyZWVuIChvc3Rib290KQorICogRGVzY3JpcHRpb246ICBTZXQgdXAgdG91Y2ggc2NyZWVuIG11eGluZworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIG11eFNldHVwVG91Y2hTY3JlZW4odm9pZCkKK3sKKwl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICAqTXV4Q29uZmlnUmVnOworCisJLyogU1BJMV9DTEsgcGluIGNvbmZpZ3VyYXRpb24sICBQSU4gPSBVMTggKi8KKwlNdXhDb25maWdSZWcgPSAodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKUNPTlRST0xfUEFEQ09ORl9TUEkxX0NMSywKKwkJCQkgICAqTXV4Q29uZmlnUmVnID0gMHgwMCA7IC8vIE1vZGUgPSAwLCBQVVBEPURpc2FibGVkCisKKwkvKiBTUEkxX01PU0kgcGluIGNvbmZpZ3VyYXRpb24sIFBJTiA9IFYyMCAqLworCU11eENvbmZpZ1JlZyA9ICh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopQ09OVFJPTF9QQURDT05GX1NQSTFfU0lNTywKKwkJCQkgICAqTXV4Q29uZmlnUmVnID0gMHgwMCA7IC8vIE1vZGUgPSAwLCBQVVBEPURpc2FibGVkCisKKwkvKiBTUEkxX01JU08gcGluIGNvbmZpZ3VyYXRpb24sIFBJTiA9IFQxOCAqLworCU11eENvbmZpZ1JlZyA9ICh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopQ09OVFJPTF9QQURDT05GX1NQSTFfU09NSSwKKwkJCQkgICAqTXV4Q29uZmlnUmVnID0gMHgwMCA7IC8vIE1vZGUgPSAwLCBQVVBEPURpc2FibGVkCisKKwkvKiBTUEkxX25DUzAgcGluIGNvbmZpZ3VyYXRpb24sIFBJTiA9IFUxOSAqLworCU11eENvbmZpZ1JlZyA9ICh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopQ09OVFJPTF9QQURDT05GX1NQSTFfTkNTMCwKKwkJCQkgICAqTXV4Q29uZmlnUmVnID0gMHgwMCA7IC8vIE1vZGUgPSAwLCBQVVBEPURpc2FibGVkCisKKwkvKiBQRU5fSVJRIHBpbiBjb25maWd1cmF0aW9uLCAgIFBJTiA9IFAyMCAqLworCU11eENvbmZpZ1JlZyA9ICh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopQ09OVFJPTF9QQURDT05GX01DQlNQMV9GU1IsCisJCQkJICAgKk11eENvbmZpZ1JlZyA9IDB4MDMgOyAvLyBNb2RlID0gMywgUFVQRD1EaXNhYmxlZAorfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUm91dGluZTogbXV4U2V0dXBIRFEgKG9zdGJvb3QpCisgKiBEZXNjcmlwdGlvbjogc2V0dXAgMXdpcmUgbXV4CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIG11eFNldHVwSERRKHZvaWQpCit7CisJdm9sYXRpbGUgdW5zaWduZWQgY2hhciAgKk11eENvbmZpZ1JlZzsKKworCS8qIEhEUV9TSU8gcGluIGNvbmZpZ3VyYXRpb24sICBQSU4gPSBOMTggKi8KKwlNdXhDb25maWdSZWcgPSAodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKUNPTlRST0xfUEFEQ09ORl9IRFFfU0lPLAorCQkJCSAgICpNdXhDb25maWdSZWcgPSAweDAwIDsgLy8gTW9kZSA9IDAsIFBVUEQ9RGlzYWJsZWQKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUm91dGluZTogbXV4U2V0dXBHUE1DIChvc3Rib290KQorICogRGVzY3JpcHRpb246IENvbmZpZ3VyZXMgYmFsbHMgd2hpY2ggY2FtIHVwIGluIHByb3RlY3RlZCBtb2RlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBtdXhTZXR1cEdQTUModm9pZCkKK3sKKwl2b2xhdGlsZSB1aW50OCAqTXV4Q29uZmlnUmVnOworCXZvbGF0aWxlIHVuc2lnbmVkIGludCAqTUNSID0gMHg0ODAwMDA4QzsKKworCS8qIGdwbWNfaW9fZGlyICovCisJKk1DUiA9IDB4MTkwMDAwMDA7CisKKwkvKiBOT1IgRkxBU0ggQ1MwICovCisJLyogc2lnbmFsIC0gR3BtY19jbGs7IHBpbiAtIEo0OyBvZmZzZXQgLSAweDAwODg7IG1vZGUgLSAwOyBCeXRlLTMJUHVsbC91cCAtIE4vQSAqLworCU11eENvbmZpZ1JlZyA9ICh2b2xhdGlsZSB1aW50OCAqKUNPTlRST0xfUEFEQ09ORl9HUE1DX0QyX0JZVEUzLAorCQkJCSAgICpNdXhDb25maWdSZWcgPSAweDAwIDsKKworCS8qIHNpZ25hbCAtIEdwbWNfaW9kaXI7IHBpbiAtIG4yOyBvZmZzZXQgLSAweDAwOEM7IG1vZGUgLSAxOyBCeXRlLTMJUHVsbC91cCAtIE4vQSAqLworCU11eENvbmZpZ1JlZyA9ICh2b2xhdGlsZSB1aW50OCAqKUNPTlRST0xfUEFEQ09ORl9HUE1DX05DUzBfQllURTMsCisJCQkJICAgKk11eENvbmZpZ1JlZyA9IDB4MDEgOworCisJLyogTVBEQihNdWx0aSBQb3J0IERlYnVnIFBvcnQpIENTMSAqLworCS8qIHNpZ25hbCAtIGdwbWNfbmNzMTsgcGluIC0gTjg7IG9mZnNldCAtIDB4MDA4QzsgbW9kZSAtIDA7IEJ5dGUtMQlQdWxsL3VwIC0gTi9BICovCisJTXV4Q29uZmlnUmVnID0gKHZvbGF0aWxlIHVpbnQ4ICopQ09OVFJPTF9QQURDT05GX0dQTUNfTkNTMF9CWVRFMSwKKwkJCQkgICAqTXV4Q29uZmlnUmVnID0gMHgwMCA7CisKKwkvKiBzaWduYWwgLSBHcG1jX25jczI7IHBpbiAtIEUyOyBvZmZzZXQgLSAweDAwOEM7IG1vZGUgLSAwOyBCeXRlLTIJUHVsbC91cCAtIE4vQSAqLworCU11eENvbmZpZ1JlZyA9ICh2b2xhdGlsZSB1aW50OCAqKUNPTlRST0xfUEFEQ09ORl9HUE1DX05DUzBfQllURTIsCisJCQkJICAgKk11eENvbmZpZ1JlZyA9IDB4MDAgOworCisKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJvdXRpbmU6IG11eFNldHVwU0RSQyAgKG9zdGJvb3QpCisgKiBEZXNjcmlwdGlvbjogQ29uZmlndXJlcyBiYWxscyB3aGljaCBjb21lIHVwIGluIHByb3RlY3RlZCBtb2RlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgbXV4U2V0dXBTRFJDKHZvaWQpCit7CisJdm9sYXRpbGUgdWludDggKk11eENvbmZpZ1JlZzsKKworCS8qIHNpZ25hbCAtIHNkcmNfbmNzMTsgcGluIC0gQzEyOyBvZmZzZXQgLSAweDAwQTA7IG1vZGUgLSAwOyBCeXRlLTEJUHVsbC91cCAtIE4vQSAqLworCU11eENvbmZpZ1JlZyA9ICh2b2xhdGlsZSB1aW50OCAqKUNPTlRST0xfUEFEQ09ORl9TRFJDX05DUzBfQllURTEsCisJCQkJICAgKk11eENvbmZpZ1JlZyA9IDB4MDAgOworCisJLyogc2lnbmFsIC0gc2RyY19hMTI7IHBpbiAtIEQxMTsgb2Zmc2V0IC0gMHgwMDMwOyBtb2RlIC0gMDsgQnl0ZS0yCVB1bGwvdXAgLSBOL0EgKi8KKwlNdXhDb25maWdSZWcgPSAodm9sYXRpbGUgdWludDggKilDT05UUk9MX1BBRENPTkZfU0RSQ19BMTRfQllURTIsCisJCQkJICAgKk11eENvbmZpZ1JlZyA9IDB4MDAgOworCisJLyogc2lnbmFsIC0gc2RyY19ja2UxOyBwaW4gLSBCMTM7IG9mZnNldCAtIDB4MDBBMDsgbW9kZSAtIDA7IEJ5dGUtMwlQdWxsL3VwIC0gTi9BICovCisJTXV4Q29uZmlnUmVnID0gKHZvbGF0aWxlIHVpbnQ4ICopQ09OVFJPTF9QQURDT05GX1NEUkNfTkNTMF9CWVRFMywKKwkJCQkgICAqTXV4Q29uZmlnUmVnID0gMHgwMDsKKworCWlmIChnZXRfY3B1X3R5cGUoKSA9PSBDUFVfMjQyMikgeworCQlNdXhDb25maWdSZWcgPSAodm9sYXRpbGUgdWludDggKilDT05UUk9MX1BBRENPTkZfU0RSQ19BMTRfQllURTAsCisJCQkJCSAgICpNdXhDb25maWdSZWcgPSAweDFiOworCX0KK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSb3V0aW5lOiB1cGRhdGVfbXV4KCkKKyAqIERlc2NyaXB0aW9uOiBVcGRhdGUgYmFsbHMgd2hpY2ggYXJlIGRpZmZlcmVudCBiZXdlZW4gYm9hcmRzLiAgQWxsIHNob3VsZCBiZQorICogICAgICAgICAgICAgIHVwZGF0ZWQgdG8gbWF0Y2ggZnVuY3Rpb25hbHkuICBIb3dldmVyLCBJJ20gb25seSB1cGRhdGluZyBvbmVzCisgKiAgICAgICAgICAgICAgd2hpY2ggSSdsbCBiZSB1c2luZyBmb3Igbm93LiAgV2hlbiBwb3dlciBjb21lcyBpbnRvIHBsYXkgdGhleQorICogICAgICAgICAgICAgIGFsbCBuZWVkIHVwZGF0aW5nLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCB1cGRhdGVfbXV4KHUzMiBidHlwZSx1MzIgbXR5cGUpCit7CisJdTMyIGNwdSwgYmFzZSA9IE9NQVAyNDIwX0NUUkxfQkFTRTsKKwljcHUgPSBnZXRfY3B1X3R5cGUoKTsKKworCWlmIChidHlwZSA9PSBCT0FSRF9INF9NRU5FTEFVUykgeworCQlpZiAoY3B1ID09IENQVV8yNDIwKSB7CisJCQkvKiBQSU4gPSBCMywgIEdQSU8uMC0+S0JSNSwgICAgICBtb2RlIDMsICAocHVuPyksLURPLSovCisJCQlfX3Jhd193cml0ZWIoMHgzLCBiYXNlKzB4MzApOworCQkJLyogUElOID0gQjEzLCBHUElPLjM4LT5LQkM2LCAgICAgbW9kZSAzLCAgKHB1bj8pLURPLSovCisJCQlfX3Jhd193cml0ZWIoMHgzLCBiYXNlKzB4YTMpOworCQkJLyogUElOID0gRjEsIEdQSU8uMjUtPkhTVVNCeHggICAgbW9kZSAzLCAgKGZvciBleHRlcm5hbCBIUyBVU0IpKi8KKwkJCS8qIFBJTiA9IEgxLCBHUElPLjI2LT5IU1VTQnh4ICAgIG1vZGUgMywgIChmb3IgZXh0ZXJuYWwgSFMgVVNCKSovCisJCQkvKiBQSU4gPSBLMSwgR1BNQ19uY3M2ICAgICAgICAgICBtb2RlIDAsICAob24gYm9hcmQgbmFuZCBhY2Nlc3MpKi8KKwkJCS8qIFBJTiA9IEwyLCBHUE1DX25jczY3ICAgICAgICAgIG1vZGUgMCwgIChmb3IgZXh0ZXJuYWwgSFMgVVNCKSovCisJCQkvKiBQSU4gPSBNMSAoSFNVU0JPVEcpICovCisJCQkvKiBQSU4gPSBQMSwgR1BJTy4zNS0+TUVOX1BPSyAgICBtb2RlIDMsICAobWVuZWxhdXMgcG93ZXJvayktRE8tKi8KKwkJCV9fcmF3X3dyaXRlYigweDMsIGJhc2UrMHg5ZCk7CisJCQkvKiBQSU4gPSBVMzIsIChXTEFOX0NMS1JFUSkgKi8KKwkJCS8qIFBJTiA9IFkxMSwgV0xBTiAqLworCQkJLyogUElOID0gQUE0LCBHUElPLjE1LT5LQkMyLCAgICAgbW9kZSAzLCAgLURPLSAqLworCQkJX19yYXdfd3JpdGViKDB4MywgYmFzZSsweGU3KTsKKwkJCS8qIFBJTiA9IEFBOCwgbURPQyAqLworCQkJLyogUElOID0gQUExMCwgQlQgKi8KKwkJCS8qIFBJTiA9IEFBMTMsIFdMQU4gKi8KKwkJCS8qIFBJTiA9IE0xOCBHUElPLjk2LT5NTUMyX1dQICAgIG1vZGUgMyAgIC1ETy0gKi8KKwkJCV9fcmF3X3dyaXRlYigweDMsIGJhc2UrMHgxMGUpOworCQkJLyogUElOID0gTjE5IEdQSU8uOTgtPldMQU5fSU5UICAgbW9kZSAzICAgLURPLSAqLworCQkJX19yYXdfd3JpdGViKDB4MywgYmFzZSsweDExMCk7CisJCQkvKiBQSU4gPSBKMTUgSEhVU0IgKi8KKwkJCS8qIFBJTiA9IEgxOSBIU1VTQiAqLworCQkJLyogUElOID0gVzEzLCBQMTMsIFIxMywgVzE2IC4uLiAqLworCQkJLyogUElOID0gVjEyIEdQSU8uMjUtPkkyQ19DQU1FTiAgbW9kZSAzICAgLURPLSAqLworCQkJX19yYXdfd3JpdGViKDB4MywgYmFzZSsweGRlKTsKKwkJCS8qIFBJTiA9IFcxOSBzeXNfbmlycS0+TUVORUxBVVNfSU5UIG1vZGUgMCAtRE8tICovCisJCQlfX3Jhd193cml0ZWIoMHgwLCBiYXNlKzB4MTJjKTsKKwkJCS8qIFBJTiA9IEFBMTctPnN5c19jbGtyZXEgICAgICAgIG1vZGUgMCAgIC1ETy0gKi8KKwkJCV9fcmF3X3dyaXRlYigweDAsIGJhc2UrMHgxMzYpOworCQl9IGVsc2UgaWYgKGNwdSA9PSBDUFVfMjQyMikgeworCQkJLyogUElOID0gQjMsICBHUElPLjAtPm5jLCAgICAgICAgbW9kZSAzLCAgc2V0IGFib3ZlIChwdW4/KSovCisJCQkvKiBQSU4gPSBCMTMsIEdQSU8uY2tlMS0+bmMsICAgICBtb2RlIDAsICBzZXQgYWJvdmUsIChwdW4/KSovCisJCQkvKiBQSU4gPSBGMSwgR1BJTy4yNS0+SFNVU0J4eCAgICBtb2RlIDMsICAoZm9yIGV4dGVybmFsIEhTIFVTQikqLworCQkJLyogUElOID0gSDEsIEdQSU8uMjYtPkhTVVNCeHggICAgbW9kZSAzLCAgKGZvciBleHRlcm5hbCBIUyBVU0IpKi8KKwkJCS8qIFBJTiA9IEsxLCBHUE1DX25jczYgICAgICAgICAgIG1vZGUgMCwgIChvbiBib2FyZCBuYW5kIGFjY2VzcykqLworCQkJX19yYXdfd3JpdGViKDB4MCwgYmFzZSsweDkyKTsKKwkJCS8qIFBJTiA9IEwyLCBHUE1DX25jczY3ICAgICAgICAgIG1vZGUgMCwgIChmb3IgZXh0ZXJuYWwgSFMgVVNCKSovCisJCQkvKiBQSU4gPSBNMSAoSFNVU0JPVEcpICovCisJCQkvKiBQSU4gPSBQMSwgR1BJTy4zNS0+TUVOX1BPSyAgICBtb2RlIDMsICAobWVuZWxhdXMgcG93ZXJvayktRE8tKi8KKwkJCV9fcmF3X3dyaXRlYigweDMsIGJhc2UrMHgxMGMpOworCQkJLyogUElOID0gVTMyLCAoV0xBTl9DTEtSRVEpICovCisJCQkvKiBQSU4gPSBBQTQsIEdQSU8uMTUtPktCQzIsICAgICBtb2RlIDMsICAtRE8tICovCisJCQlfX3Jhd193cml0ZWIoMHgzLCBiYXNlKzB4MzApOworCQkJLyogUElOID0gQUE4LCBtRE9DICovCisJCQkvKiBQSU4gPSBBQTEwLCBCVCAqLworCQkJLyogUElOID0gQUExMiwgV0xBTiAqLworCQkJLyogUElOID0gTTE4IEdQSU8uOTYtPk1NQzJfV1AgICAgbW9kZSAzICAgLURPLSAqLworCQkJX19yYXdfd3JpdGViKDB4MywgYmFzZSsweDEwZSk7CisJCQkvKiBQSU4gPSBOMTkgR1BJTy45OC0+V0xBTl9JTlQgICBtb2RlIDMgICAtRE8tICovCisJCQlfX3Jhd193cml0ZWIoMHgzLCBiYXNlKzB4MTEwKTsKKwkJCS8qIFBJTiA9IEoxNSBISFVTQiAqLworCQkJLyogUElOID0gSDE5IEhTVVNCICovCisJCQkvKiBQSU4gPSBXMTMsIFAxMywgUjEzLCBXMTYgLi4uICovCisJCQkvKiBQSU4gPSBWMTIgR1BJTy4yNS0+STJDX0NBTUVOICBtb2RlIDMgICAtRE8tICovCisJCQlfX3Jhd193cml0ZWIoMHgzLCBiYXNlKzB4ZGUpOworCQkJLyogUElOID0gVzE5IHN5c19uaXJxLT5NRU5FTEFVU19JTlQgbW9kZSAwIC1ETy0gKi8KKwkJCV9fcmF3X3dyaXRlYigweDAsIGJhc2UrMHgxMmMpOworCQkJLyogUElOID0gQUExNy0+c3lzX2Nsa3JlcSAgICAgICAgbW9kZSAwICAgLURPLSAqLworCQkJX19yYXdfd3JpdGViKDB4MCwgYmFzZSsweDEzNik7CisJCX0KKworCX0gZWxzZSBpZiAoYnR5cGUgPT0gQk9BUkRfSDRfU0RQKSB7CisJCWlmIChjcHUgPT0gQ1BVXzI0MjApIHsKKwkJCS8qIFBJTiA9IEIzLCAgR1BJTy4wLT5uYyAgICAgICAgIG1vZGUgMywgIHNldCBhYm92ZSAocHVuPykqLworCQkJLyogUElOID0gQjEzLCBHUElPLmNrZTEtPm5jLCAgICAgbW9kZSAwLCAgc2V0IGFib3ZlLCAocHVuPykqLworCQkJLyogUGluID0gWTExIFZMTlEgKi8KKwkJCS8qIFBpbiA9IEFBNCBWTE5RICovCisJCQkvKiBQaW4gPSBBQTYgVkxOUSAqLworCQkJLyogUGluID0gQUE4IFZMTlEgKi8KKwkJCS8qIFBpbiA9IEFBMTAgVkxOUSAqLworCQkJLyogUGluID0gQUExMiBWTE5RICovCisJCQkvKiBQSU4gPSBNMTggR1BJTy45Ni0+S0JSNSAgICAgICBtb2RlIDMgICAtRE8tICovCisJCQlfX3Jhd193cml0ZWIoMHgzLCBiYXNlKzB4MTBlKTsKKwkJCS8qIFBJTiA9IE4xOSBHUElPLjk4LT5LQkM2ICAgICAgIG1vZGUgMyAgIC1ETy0gKi8KKwkJCV9fcmF3X3dyaXRlYigweDMsIGJhc2UrMHgxMTApOworCQkJLyogUElOID0gSjE1IE1ET0NfbkRNQVJFUSAqLworCQkJLyogUElOID0gSDE5IEdQSU8uMTAwLT5LQkMyICAgICAgbW9kZSAzICAgLURPLSAqLworCQkJX19yYXdfd3JpdGViKDB4MywgYmFzZSsweDExNCk7CisJCQkvKiBQSU4gPSBXMTMsIFYxMiwgUDEzLCBSMTMsIFcxOSwgVzE2IC4uLiAqLworCQkJLyogUElOID0gQUExNyBzeXNfY2xrcmVxLT5idF9jbGtfcmVxICBtb2RlIDAgICovCisJCX0gZWxzZSBpZiAoY3B1ID09IENQVV8yNDIyKSB7CisJCQkvKiBQSU4gPSBCMywgIEdQSU8uMC0+TU1DX0NELCAgICBtb2RlIDMsICBzZXQgYWJvdmUgKi8KKwkJCS8qIFBJTiA9IEIxMywgR1BJTy4zOC0+d2xhbl9pbnQsIG1vZGUgMywgIChwdW4/KSovCisJCQkvKiBQaW4gPSBZMTEgVkxOUSAqLworCQkJLyogUGluID0gQUE0IFZMTlEgKi8KKwkJCS8qIFBpbiA9IEFBNiBWTE5RICovCisJCQkvKiBQaW4gPSBBQTggVkxOUSAqLworCQkJLyogUGluID0gQUExMCBWTE5RICovCisJCQkvKiBQaW4gPSBBQTEyIFZMTlEgKi8KKwkJCS8qIFBJTiA9IE0xOCBHUElPLjk2LT5LQlI1ICAgICAgIG1vZGUgMyAgIC1ETy0gKi8KKwkJCV9fcmF3X3dyaXRlYigweDMsIGJhc2UrMHgxMGUpOworCQkJLyogUElOID0gTjE5IEdQSU8uOTgtPktCQzYgICAgICAgbW9kZSAzICAgLURPLSAqLworCQkJX19yYXdfd3JpdGViKDB4MywgYmFzZSsweDExMCk7CisJCQkvKiBQSU4gPSBKMTUgTURPQ19uRE1BUkVRICovCisJCQkvKiBQSU4gPSBIMTkgR1BJTy4xMDAtPktCQzIgICAgICBtb2RlIDMgICAtRE8tICovCisJCQlfX3Jhd193cml0ZWIoMHgzLCBiYXNlKzB4MTE0KTsKKwkJCS8qIFBJTiA9IFcxMywgVjEyLCBQMTMsIFIxMywgVzE5LCBXMTYgLi4uICovCisJCQkvKiBQSU4gPSBBQTE3IHN5c19jbGtyZXEtPmJ0X2Nsa19yZXEgIG1vZGUgMCAqLworCQl9CisJfQorfQorCisKZGlmZiAtLWdpdCBhL2JvYXJkL29tYXAyNDIwaDQvcGxhdGZvcm0uUyBiL2JvYXJkL29tYXAyNDIwaDQvcGxhdGZvcm0uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzI4ZTg0Ci0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvb21hcDI0MjBoNC9wbGF0Zm9ybS5TCkBAIC0wLDAgKzEsMjM3IEBACisvKgorICogQm9hcmQgc3BlY2lmaWMgc2V0dXAgaW5mbworICoKKyAqIChDKSBDb3B5cmlnaHQgMjAwNAorICogVGV4YXMgSW5zdHJ1bWVudHMsIDx3d3cudGkuY29tPgorICogUmljaGFyZCBXb29kcnVmZiA8ci13b29kcnVmZjJAdGkuY29tPgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlIDx2ZXJzaW9uLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvb21hcDI0MjAuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9tZW0uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9jbG9ja3MuaD4KKworX1RFWFRfQkFTRToKKwkud29yZAlURVhUX0JBU0UJLyogc2RyYW0gbG9hZCBhZGRyIGZyb20gY29uZmlnLm1rICovCisKKyNpZmRlZiBDT05GSUdfUEFSVElBTF9TUkFNCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogY3B5X2Nsa19jb2RlOiByZWxvY2F0ZXMgY2xvY2sgY29kZSBpbnRvIFNSQU0gd2hlcmUgaXRzIHNhZmVyIHRvIGV4ZWN1dGUKKyAqIFIxID0gU1JBTSBkZXN0aW5hdGlvbiBhZGRyZXNzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisuZ2xvYmFsIGNweV9jbGtfY29kZQorIGNweV9jbGtfY29kZToKKyAgICAgICAgLyogQ29weSBEUExMIGNvZGUgaW50byBTUkFNICovIAorICAgICAgICBhZHIgICAgIHIwLCBnb190b19zcGVlZCAgICAgICAgIC8qIGdldCBhZGRyIG9mIGNsb2NrIHNldHRpbmcgY29kZSAqLworICAgICAgICBtb3YgICAgIHIyLCAjMzg0ICAgICAgICAgICAgICAgIC8qIHIyIHNpemUgdG8gY29weSAoZGl2IGJ5IDMyIGJ5dGVzKSAqLworICAgICAgICBtb3YgICAgIHIxLCByMSAgICAgICAgICAgICAgICAgIC8qIHIxIDwtIGRlc3QgYWRkcmVzcyAocGFzc2VkIGluKSAqLworICAgICAgICBhZGQgICAgIHIyLCByMiwgcjAgICAgICAgICAgICAgIC8qIHIyIDwtIHNvdXJjZSBlbmQgYWRkcmVzcyAqLworbmV4dDI6CisgICAgICAgIGxkbWlhICAgcjAhLCB7cjMtcjEwfSAgICAgICAgICAgLyogY29weSBmcm9tIHNvdXJjZSBhZGRyZXNzIFtyMF0gICAgKi8KKyAgICAgICAgc3RtaWEgICByMSEsIHtyMy1yMTB9ICAgICAgICAgICAvKiBjb3B5IHRvICAgdGFyZ2V0IGFkZHJlc3MgW3IxXSAgICAqLworICAgICAgICBjbXAgICAgIHIwLCByMiAgICAgICAgICAgICAgICAgIC8qIHVudGlsIHNvdXJjZSBlbmQgYWRkcmVzcyBbcjJdICAgICovCisgICAgICAgIGJuZSAgICAgbmV4dDIKKwltb3YJcGMsIGxyICAgICAgICAgICAgICAgICAgLyogYmFjayB0byBjYWxsZXIgKi8KKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqICBnb190b19zcGVlZDogLU1vdmVzIHRvIGJ5cGFzcywgLUNvbW1pdHMgY2xvY2sgZGl2aWRlcnMsIC1wdXRzIGRwbGwgYXQgc3BlZWQKKyAqICAgICAgICAgICAgICAgLWV4ZWN1dGVkIGZyb20gU1JBTS4KKyAqICBSMCA9IFBSQ01fQ0xLQ0ZHX0NUUkwgLSBhZGRyIG9mIHZhbGlkIHJlZworICogIFIxID0gQ01fQ0xLRU5fUExMIC0gYWRkciBkcGxsIGN0bHIgcmVnCisgKiAgUjIgPSBkcGxsIHZhbHVlCisgKiAgUjMgPSBDTV9JRExFU1RfQ0tHRU4gLSBhZGRyIGRwbGwgbG9jayB3YWl0CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLyAgICAKKy5nbG9iYWwgZ29fdG9fc3BlZWQKKyBnb190b19zcGVlZDoKKyAgICAgICAgc3ViICAgICBzcCwgc3AsICMweDQgLyogZ2V0IHNvbWUgc3RhY2sgc3BhY2UgKi8KKyAgICAgICAgc3RyICAgICByNCwgW3NwXSAgICAgLyogc2F2ZSByNCdzIHZhbHVlICovCisKKyAgICAgICAgLyogbW92ZSBpbnRvIGZhc3QgcmVsb2NrIGJ5cGFzcyAqLworICAgICAgICBsZHIgICAgIHI4LCBwbGxfY3RsX2FkZAorICAgICAgICBtb3YgICAgIHI0LCAjMHgyCisgICAgICAgIHN0ciAgICAgcjQsIFtyOF0KKyAgICAgICAgbGRyICAgICByNCwgcGxsX3N0YXQKK2Jsb2NrOgorICAgICAgICBsZHIgICAgIHI4LCBbcjRdCS8qIHdhaXQgZm9yIGJ5cGFzcyB0byB0YWtlIGVmZmVjdCAqLworICAgICAgICBhbmQgICAgIHI4LCByOCwgIzB4MworICAgICAgICBjbXAgICAgIHI4LCAjMHgxCisgICAgICAgIGJuZSAgICAgYmxvY2sKKworCS8qIHNldCBuZXcgZHBsbCBkaXZpZGVycyBfYWZ0ZXJfIGluIGJ5cGFzcyAqLworCWxkciAgICAgcjQsIHBsbF9kaXZfYWRkCisJbGRyICAgICByOCwgcGxsX2Rpdl92YWwKKyAgICAgICAgc3RyICAgICByOCwgW3I0XQorICAgIAorICAgICAgICAvKiBub3cgcHJlcGFyZSBHUE1DIChmbGFzaCkgZm9yIG5ldyBkcGxsIHNwZWVkICovCisJLyogZmxhc2ggbmVlZHMgdG8gYmUgc3RhYmxlIHdoZW4gd2UganVtcCBiYWNrIHRvIGl0ICovCisgICAgICAgIGxkciAgICAgcjQsIGNmZzNfMF9hZGRyCisgICAgICAgIGxkciAgICAgcjgsIGNmZzNfMF92YWwKKyAgICAgICAgc3RyICAgICByOCwgW3I0XQorICAgICAgICBsZHIgICAgIHI0LCBjZmc0XzBfYWRkcgorICAgICAgICBsZHIgICAgIHI4LCBjZmc0XzBfdmFsCisgICAgICAgIHN0ciAgICAgcjgsIFtyNF0KKyAgICAgICAgbGRyICAgICByNCwgY2ZnMV8wX2FkZHIKKyAgICAgICAgbGRyICAgICByOCwgW3I0XQorICAgICAgICBvcnIgICAgIHI4LCByOCwgIzB4MyAgICAgLyogdXAgZ3BtYyBkaXZpZGVyICovCisgICAgICAgIHN0ciAgICAgcjgsIFtyNF0KKworCS8qIHNldHVwIHRvIDJ4IGxvb3AgdGhvdWdoIGNvZGUuICBUaGUgZmlyc3QgbG9vcCBwcmUtbG9hZHMgdGhlIAorICAgICAgICAgKiBpY2FjaGUsIHRoZSAybmQgY29tbWl0cyB0aGUgcHJjbSBjb25maWcsIGFuZCBsb2NrcyB0aGUgZHBsbAorICAgICAgICAgKi8KKyAgICAgICAgbW92ICAgICByNCwgIzB4MTAwMCAgICAgIC8qIHNwaW4gc3BpbiBzcGluICovCisgICAgICAgIG1vdiAgICAgcjgsICMweDQgICAgICAgICAvKiBmaXJzdCBwYXNzIGNvbmRpdGlvbiAmIHNldCByZWdpc3RlcnMgKi8KKyAgICAgICAgY21wICAgICByOCwgIzB4NAorMjoKKyAgICAgICAgbGRybmUgICByOCwgW3IzXSAgICAgICAgIC8qIERQTEwgbG9jayBjaGVjayAqLworICAgICAgICBhbmQgICAgIHI4LCByOCwgIzB4NworICAgICAgICBjbXAgICAgIHI4LCAjMHgyCisgICAgICAgIGJlcSAgICAgNGYKKzM6CisgICAgICAgIHN1YmVxICAgcjgsIHI4LCAjMHgxCisgICAgICAgIHN0cmVxICAgcjgsIFtyMF0gICAgICAgICAvKiBjb21taXQgZGl2aWRlcnMgKDJuZCB0aW1lKSAqLworICAgICAgICBub3AKK2xsb29wMToKKyAgICAgICAgc3ViICAgICByNCwgcjQsICMweDEgICAgLyogTG9vcCBjdXJyZW50bHkgbmVjZXNzYXJ5IGVsc2UgYmFkIGp1bXBzICovCisgICAgICAgIG5vcAorICAgICAgICBjbXAgICAgIHI0LCAjMHgwCisgICAgICAgIGJuZSAgICAgbGxvb3AxCisgICAgICAgIG1vdiAgICAgcjQsICMweDQwMDAwCisgICAgICAgIGNtcCAgICAgcjgsICMweDEKKyAgICAgICAgbm9wCisgICAgICAgIHN0cmVxICAgcjIsIFtyMV0gICAgICAgIC8qIGxvY2sgZHBsbCAoMm5kIHRpbWUpICovCisgICAgICAgIG5vcAorbGxvb3AyOgorICAgICAgICBzdWIgICAgIHI0LCByNCwgIzB4MSAgICAvKiBsb29wIGN1cnJlbnRseSBuZWNlc3NhcnkgZWxzZSBiYWQganVtcHMgKi8KKyAgICAgICAgbm9wCisgICAgICAgIGNtcCAgICAgcjQsICMweDAKKyAgICAgICAgYm5lICAgICBsbG9vcDIKKyAgICAgICAgbW92ICAgICByNCwgIzB4NDAwMDAKKyAgICAgICAgY21wICAgICByOCwgIzB4MQorICAgICAgICBub3AKKyAgICAgICAgbGRyZXEgICByOCwgW3IzXSAgICAgICAgIC8qIGdldCBsb2NrIGNvbmRpdGlvbiBmb3IgZHBsbCAqLworICAgICAgICBjbXAgICAgIHI4LCAjMHg0ICAgICAgICAgLyogZmlyc3QgdGltZSB0aG91Z2g/ICovCisgICAgICAgIGJuZSAgICAgMmIKKyAgICAgICAgbW92ZXEgICByOCwgIzB4MiAgICAgICAgIC8qIHNldCB0byBkcGxsIGNoZWNrIGNvbmRpdGlvbi4gKi8KKyAgICAgICAgYmVxICAgICAzYiAgICAgICAgICAgICAgIC8qIGlmIGNvbmRpdGlvbiBub3QgdHJ1ZSBicmFuY2ggKi8KKzQ6ICAKKyAgICAgICAgbGRyICAgICByNCwgW3NwXQorICAgICAgICBhZGQgICAgIHNwLCBzcCwgIzB4NCAgICAgLyogcmV0dXJuIHN0YWNrIHNwYWNlICovCisgICAgICAgIG1vdiAgICAgcGMsIGxyICAgICAgICAgICAvKiBiYWNrIHRvIGNhbGxlciwgbG9ja2VkICovICAgICAgICAKKworX2dvX3RvX3NwZWVkOiAud29yZCBnb190b19zcGVlZAorCisvKiB0aGVzZSBjb25zdGFudHMgbmVlZCB0byBiZSBjbG9zZSBmb3IgUElDIGNvZGUgKi8KK2NmZzNfMF9hZGRyOgorICAgIC53b3JkICBHUE1DX0NPTkZJRzNfMAorY2ZnM18wX3ZhbDogCisgICAgLndvcmQgIEg0XzI0WFhfR1BNQ19DT05GSUczXzAKK2NmZzRfMF9hZGRyOgorICAgIC53b3JkICBHUE1DX0NPTkZJRzRfMAorY2ZnNF8wX3ZhbDoKKyAgICAud29yZCAgSDRfMjRYWF9HUE1DX0NPTkZJRzRfMAorY2ZnMV8wX2FkZHI6CisgICAgLndvcmQgIEdQTUNfQ09ORklHMV8wCitwbGxfY3RsX2FkZDoKKyAgICAud29yZCBDTV9DTEtFTl9QTEwKK3BsbF9zdGF0OgorICAgIC53b3JkIENNX0lETEVTVF9DS0dFTgorcGxsX2Rpdl9hZGQ6CisgICAgLndvcmQgQ01fQ0xLU0VMMV9QTEwgCitwbGxfZGl2X3ZhbDoKKyAgICAud29yZCBEUExMX1ZBTAkvKiBEUExMIHNldHRpbmcgKDMwME1IeiBkZWZhdWx0KSAqLworI2VuZGlmICAgICAgICAgICAgCisKKy5nbG9ibCBwbGF0Zm9ybXNldHVwCitwbGF0Zm9ybXNldHVwOgorCW1vdiByMywgcjAgICAgIC8qIHNhdmUgc2tpcCBpbmZvcm1hdGlvbiAqLworI2lmZGVmIENPTkZJR19BUFRJWAorCWxkcglyMCwJUkVHX1NEUkNfTUNGR18wCisJbGRyCXIxLAlWQUxfU0RSQ19NQ0ZHXzAKKwlzdHIJcjEsCVtyMF0KKwlsZHIJcjAsCVJFR19TRFJDX01SXzAKKwlsZHIJcjEsCVZBTF9TRFJDX01SXzAKKwlzdHIJcjEsCVtyMF0KKwkvKiBhIGRkciBuZWVkcyBlbXIxIHNldCBoZXJlICovCisJbGRyCXIwLAlSRUdfU0RSQ19TSEFSSU5HCisJbGRyCXIxLAlWQUxfU0RSQ19TSEFSSU5HCisJc3RyCXIxLAlbcjBdCisgICAgICAgCWxkcglyMCwJUkVHX1NEUkNfUkZSX0NUUkxfMAorCWxkcglyMSwJVkFMX1NEUkNfUkZSX0NUUkxfMAorCXN0cglyMSwJW3IwXQorCisgICAgICAgLyogbGl0dGxlIGRlbGF5IGFmdGVyIGluaXQgKi8KKyAgICAgICBtb3YgcjIsICMweDE4MDAgICAgICAgICAgICAgICAgICAgICAgICAKKzE6ICAgICAgIAorICAgICAgICBzdWJzIHIyLCByMiwgIzB4MQorICAgICAgICBibmUgMWIKKyNlbmRpZgorI2lmZGVmIENPTkZJR19QQVJUSUFMX1NSQU0KKwlsZHIJc3AsCVNSQU1fU1RBQ0sKKyAgICAgICAgc3RyICAgICBpcCwJW3NwXSAgICAvKiBzdGFzaCBvbGQgbGluayByZWdpc3RlciAqLworCW1vdglpcCwJbHIJLyogc2F2ZSBsaW5rIHJlZyBhY3Jvc3MgY2FsbCAqLworICAgICAgICBtb3YgICAgIHIwLCAgICAgcjMgICAgICAvKiBwYXNzIHNraXAgaW5mbyB0byBzX2luaXQgKi8KKyAgICAgICAgYmwgICAgICBzX2luaXQgICAgICAgICAgLyogZ28gc2V0dXAgcGxsLG11eCxtZW1vcnkgKi8KKyAgICAgICAgbGRyICAgICBpcCwJW3NwXSAgICAvKiByZXN0b3JlIHNhdmUgaXAgKi8KKwltb3YJbHIsCWlwCS8qIHJlc3RvcmUgbGluayByZWcgKi8KKyNlbmRpZgorCS8qIG1hcCBpbnRlcnJ1cHQgY29udHJvbGxlciAqLworCWxkcglyMCwJVkFMX0lOVEhfU0VUVVAKKwltY3IJcDE1LCAwLCByMCwgYzE1LCBjMiwgNAorCisJLyogYmFjayB0byBhcmNoIGNhbGxpbmcgY29kZSAqLworCW1vdglwYywJbHIKKworCS8qIHRoZSBsaXRlcmFsIHBvb2xzIG9yaWdpbiAqLworCS5sdG9yZworCitSRUdfQ09OVFJPTF9TVEFUVVM6CisJLndvcmQgQ09OVFJPTF9TVEFUVVMKK1ZBTF9JTlRIX1NFVFVQOgorCS53b3JkIFBFUklGRVJBTF9QT1JUX0JBU0UKK1NSQU1fU1RBQ0s6CisJLndvcmQgTE9XX0xFVkVMX1NSQU1fU1RBQ0sKKworI2lmZGVmIENPTkZJR19BUFRJWAorUkVHX1NEUkNfU0hBUklORzoKKwkud29yZCBTRFJDX1NIQVJJTkcKK1JFR19TRFJDX01DRkdfMDoKKwkud29yZCBTRFJDX01DRkdfMAorUkVHX1NEUkNfTVJfMDoKKwkud29yZCBTRFJDX01SXzAKK1JFR19TRFJDX1JGUl9DVFJMXzA6CisgICAgICAgIC53b3JkIFNEUkNfUkZSX0NUUkwKK1ZBTF9TRFJDX1NIQVJJTkc6CisJLndvcmQgVkFMX0g0X1NEUkNfU0hBUklORworVkFMX1NEUkNfTUNGR18wOgorCS53b3JkIFZBTF9INF9TRFJDX01DRkdfMAorVkFMX1NEUkNfTVJfMDoKKwkud29yZCBWQUxfSDRfU0RSQ19NUl8wCitWQUxfU0RSQ19SRlJfQ1RSTF8wOgorICAgICAgICAud29yZCBWQUxfSDRfU0RSQ19SRlJfQ1RSTF8wCisjZW5kaWYKKworCisKKworCisKZGlmZiAtLWdpdCBhL2JvYXJkL29tYXAyNDIwaDQvc3lzX2luZm8uYyBiL2JvYXJkL29tYXAyNDIwaDQvc3lzX2luZm8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWZlOWUzCi0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvb21hcDI0MjBoNC9zeXNfaW5mby5jCkBAIC0wLDAgKzEsMjAyIEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDA0CisgKiBUZXhhcyBJbnN0cnVtZW50cywgPHd3dy50aS5jb20+CisgKiBSaWNoYXJkIFdvb2RydWZmIDxyLXdvb2RydWZmMkB0aS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIC9QVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9vbWFwMjQyMC5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2JpdHMuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9tZW0uaD4gIC8qIGdldCBtZW0gdGFibGVzICovCisjaW5jbHVkZSA8YXNtL2FyY2gvc3lzX3Byb3RvLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvc3lzX2luZm8uaD4KKyNpbmNsdWRlIDxpMmMuaD4KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBnZXRfY3B1X3R5cGUoKSAtIGxvdyBsZXZlbCBnZXQgY3B1IHR5cGUKKyAqIC0gbm8gQyBnbG9iYWxzIHlldC4KKyAqIC0ganVzdCBsb29raW5nIHRvIHNheSBpZiB0aGlzIGlzIGEgMjQyMiBvciAyNDIwIG9yIC4uLgorICogLSB0byBzdGFydCB3aXRoIHdlIHdpbGwgbG9vayBhdCBzd2l0Y2ggc2V0dGluZ3MuLgorICogLSAyNDIyIGlkJ3Mgc2FtZSBhcyAyNDIwIGZvciBFUzEgd2lsbCByZWx5IG9uIEg0IGJvYXJkIGNoYXJhY3RlcmlzdGljcworICogICAobXV4IGZvciAyNDIwLCBub24tbXV4IGZvciAyNDIyKS4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit1MzIgZ2V0X2NwdV90eXBlKHZvaWQpCit7CisJdTMyIHY7CisKKwl2ID0gX19yYXdfcmVhZGwoVEFQX0lEQ09ERV9SRUcpOworCXYgJj0gQ1BVXzI0WFhfSURfTUFTSzsKKwlpZiAodiA9PSBDUFVfMjQyMF9DSElQSUQpIHsJICAvKiBjdXJyZW50bHkgMjQyMCBhbmQgMjQyMiBoYXZlIHNhbWUgaWQgKi8KKwkJaWYgKGlzX2dwbWNfbXV4ZWQoKSA9PSBHUE1DX01VWEVEKQkgIC8qIGlmIG11eCdlZCAqLworCQkJcmV0dXJuKENQVV8yNDIwKTsKKwkJZWxzZQorCQkJcmV0dXJuKENQVV8yNDIyKTsKKwl9IGVsc2UKKwkJcmV0dXJuKENQVV8yNDIwKTsgLyogZG9uJ3Qga25vdywgc2F5IDI0MjAgKi8KK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogZ2V0X2NwdV9yZXYodm9pZCkgLSBleHRyYWN0IHZlcnNpb24gaW5mbworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3UzMiBnZXRfY3B1X3Jldih2b2lkKQoreworCXUzMiB2OworCXYgPSBfX3Jhd19yZWFkbChUQVBfSURDT0RFX1JFRyk7CisJdiA9IHYgPj4gMjg7CisJcmV0dXJuKHYrMSk7ICAvKiBjdXJyZW50bHkgMjQyMiBhbmQgMjQyMCBtYXRjaCB1cCAqLworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGdldF9tZW1fdHlwZSgpIC0gaWRlbnRpZnkgdHlwZSBvZiBtRERSIHBhcnQgdXNlZC4KKyAqIDI0MjIgdXNlcyBzdGFja2VkIEREUiwgMiBwYXJ0cyBDUzAvQ1MxLgorICogMjQyMCBtYXkgaGF2ZSAxIG9yIDIsIG5vIGdvb2Qgd2F5IHRvIGtub3cuLi5vbmx5IGluaXQgMS4uLgorICogd2hlbiBlZXByb20gZGF0YSBpcyB1cCB3ZSBjYW4gc2VsZWN0IDEgbW9yZS4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordTMyIGdldF9tZW1fdHlwZSh2b2lkKQoreworCWlmIChnZXRfY3B1X3R5cGUoKSA9PSBDUFVfMjQyMikKKwkJcmV0dXJuKEREUl9TVEFDS0VEKTsKKworCWlmIChnZXRfYm9hcmRfdHlwZSgpID09IEJPQVJEX0g0X01FTkVMQVVTKQorCQlyZXR1cm4oRERSX0NPTUJPKTsKKwllbHNlCisJCXJldHVybihERFJfRElTQ1JFVEUpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGdldF9ib2FyZF90eXBlKCkgLSBnZXQgYm9hcmQgdHlwZSBiYXNlZCBvbiBjdXJyZW50IHByb2R1Y3Rpb24gc3RhdHMuCisgKiAgLS0tIE5PVEU6IDIgSTJDIEVFUFJPTXMgd2lsbCBzb21lZGF5IGJlIHBvcHVsYXRlZCB3aXRoIHByb3BlciBpbmZvLgorICogICAgICB3aGVuIHRoZXkgYXJlIGF2YWlsYWJsZSB3ZSBjYW4gZ2V0IGluZm8gZnJvbSB0aGVyZS4gIFRoaXMgc2hvdWxkCisgKiAgICAgIGJlIGNvcnJlY3Qgb2YgYWxsIGtub3duIGJvYXJkcyB1cCB1bnRpbCB0b2RheS4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit1MzIgZ2V0X2JvYXJkX3R5cGUodm9pZCkKK3sKKwlpZiAoaTJjX3Byb2JlKEkyQ19NRU5FTEFVUykgPT0gMCkKKwkJcmV0dXJuKEJPQVJEX0g0X01FTkVMQVVTKTsKKwllbHNlCisJCXJldHVybihCT0FSRF9INF9TRFApOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBnZXRfc3lzYm9vdF92YWx1ZSgpIC0gZ2V0IGluaXQgd29yZCBzZXR0aW5ncyAoZGlwIHN3aXRjaCBvbiBoNCkKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit1MzIgZ2V0X3N5c2Jvb3RfdmFsdWUodm9pZCkKK3sKKwlyZXR1cm4oMHgwMDAwMEZGRiAmIF9fcmF3X3JlYWRsKENPTlRST0xfU1RBVFVTKSk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBnZXRfZ3BtYzBfYmFzZSgpIC0gUmV0dXJuIGN1cnJlbnQgYWRkcmVzcyBoYXJkd2FyZSB3aWxsIGJlCisgKiAgICAgZmV0Y2hpbmcgZnJvbS4gVGhlIGJlbG93IGVmZmVjdGl2ZWx5IGdpdmVzIHdoYXQgaXMgY29ycmVjdCwgaXRzIGEgYml0CisgKiAgIG1pcy1sZWFkaW5nIGNvbXBhcmVkIHRvIHRoZSBUUk0uICBGb3IgdGhlIG1vc3QgZ2VuZXJhbCBjYXNlIHRoZSBtYXNrCisgKiAgIG5lZWRzIHRvIGJlIGFsc28gdGFrZW4gaW50byBhY2NvdW50IHRoaXMgZG9lcyB3b3JrIGluIHByYWN0aWNlLgorICogICAtIGZvciB1LWJvb3Qgd2UgY3VycmVudGx5IG1hcDoKKyAqICAgICAgIC0tIDAgdG8gbm90aGluZywKKyAqICAgICAgIC0tIDQgdG8gZmxhc2gKKyAqICAgICAgIC0tIDggdG8gZW5lbnQKKyAqICAgICAgIC0tIGMgdG8gd2lmaQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit1MzIgZ2V0X2dwbWMwX2Jhc2Uodm9pZCkKK3sKKwl1MzIgYjsKKworCWIgPSBfX3Jhd19yZWFkbChHUE1DX0NPTkZJRzdfMCk7CisJYiAmPSAweDFGOwkgLyoga2VlcCBiYXNlIFs1OjBdICovCisJYiA9IGIgPDwgMjQ7IC8qIHJldCAweDBiMDAwMDAwICovCisJcmV0dXJuKGIpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBpc19ncG1jX211eGVkKCkgLSB0ZWxscyBpZiBhZGRyZXNzL2RhdGEgbGluZXMgYXJlIG11bHRpcGxleGVkCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit1MzIgaXNfZ3BtY19tdXhlZCh2b2lkKQoreworCXUzMiBtdXg7CisJbXV4ID0gZ2V0X3N5c2Jvb3RfdmFsdWUoKTsKKwlpZiAobXV4ICYgQklUMSkJICAgLyogaWYgbXV4J2VkICovCisJCXJldHVybihHUE1DX01VWEVEKTsKKwllbHNlCisJCXJldHVybihHUE1DX05PTk1VWEVEKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIGdldF9ncG1jMF90eXBlKCkgLSByZWFkIHN5c2Jvb3QgbGluZXMgdG8gc2VlIHR5cGUgb2YgbWVtb3J5IGF0dGFjaGVkCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordTMyIGdldF9ncG1jMF90eXBlKHZvaWQpCit7CisJdTMyIHR5cGU7CisJdHlwZSA9IGdldF9zeXNib290X3ZhbHVlKCk7CisJaWYgKCh0eXBlICYgKEJJVDN8QklUMikpID09IChCSVQzfEJJVDIpKQorCQlyZXR1cm4oVFlQRV9OQU5EKTsKKwllbHNlCisJCXJldHVybihUWVBFX05PUik7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBnZXRfZ3BtYzBfd2lkdGgoKSAtIFNlZSBpZiBidXMgaXMgaW4geDggb3IgeDE2IChtYWlubHkgZm9yIG5hbmQpCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3UzMiBnZXRfZ3BtYzBfd2lkdGgodm9pZCkKK3sKKwl1MzIgd2lkdGg7CisJd2lkdGggPSBnZXRfc3lzYm9vdF92YWx1ZSgpOworCWlmICgod2lkdGggJiAweEYpID09IChCSVQzfEJJVDIpKQorCQlyZXR1cm4oV0lEVEhfOEJJVCk7CisJZWxzZQorCQlyZXR1cm4oV0lEVEhfMTZCSVQpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiB3YWl0X29uX3ZhbHVlKCkgLSBjb21tb24gcm91dGluZSB0byBhbGxvdyB3YWl0aW5nIGZvciBjaGFuZ2VzIGluCisgKiAgIHZvbGF0aWxlIHJlZ3MuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordTMyIHdhaXRfb25fdmFsdWUodTMyIHJlYWRfYml0X21hc2ssIHUzMiBtYXRjaF92YWx1ZSwgdTMyIHJlYWRfYWRkciwgdTMyIGJvdW5kKQoreworCXUzMiBpID0gMCwgdmFsOworCWRvIHsKKwkJKytpOworCQl2YWwgPSBfX3Jhd19yZWFkbChyZWFkX2FkZHIpICYgcmVhZF9iaXRfbWFzazsKKwkJaWYgKHZhbCA9PSBtYXRjaF92YWx1ZSkKKwkJCXJldHVybigxKTsKKwkJaWYgKGk9PWJvdW5kKQorCQkJcmV0dXJuKDApOworCX0gd2hpbGUgKDEpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgZGlzcGxheV9ib2FyZF9pbmZvKCkgLSBwcmludCBiYW5uZXIgd2l0aCBib2FyZCBpbmZvLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgZGlzcGxheV9ib2FyZF9pbmZvKHUzMiBidHlwZSkKK3sKKwljaGFyIGNwdV8yNDIwW10gPSAiMjQyMCI7CisJY2hhciBjcHVfMjQyMltdID0gIjI0MjIiOworCWNoYXIgZGJfbWVuW10gPSAiTWVuZWxhdXMiOworCWNoYXIgZGJfaXBbXT0gIklQIjsKKwljaGFyICpjcHVfcywgKmRiX3M7CisJdTMyIGNwdSA9IGdldF9jcHVfdHlwZSgpOworCisJaWYoY3B1ID09IENQVV8yNDIwKQorCQljcHVfcyA9IGNwdV8yNDIwOworCWVsc2UKKwkJY3B1X3MgPSBjcHVfMjQyMjsKKwlpZihidHlwZSA9PSAgQk9BUkRfSDRfTUVORUxBVVMpCisJCWRiX3MgPSBkYl9tZW47CisJZWxzZQorCQlkYl9zID0gZGJfaXA7CisJcHJpbnRmKCJUSSBINCBTRFAgQmFzZSBCb2FyZCB3aXRoIE9NQVAlcyAlcyBEYXVnaHRlciBCb2FyZFxuIixjcHVfcywgZGJfcyk7Cit9CmRpZmYgLS1naXQgYS9ib2FyZC9vbWFwMjQyMGg0L3UtYm9vdC5sZHMgYi9ib2FyZC9vbWFwMjQyMGg0L3UtYm9vdC5sZHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzI0YzFkZAotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL29tYXAyNDIwaDQvdS1ib290LmxkcwpAQCAtMCwwICsxLDU4IEBACisvKgorICogSmFudWFyeSAyMDA0IC0gQ2hhbmdlZCB0byBzdXBwb3J0IEg0IGRldmljZSAKKyAqIENvcHlyaWdodCAoYykgMjAwNCBUZXhhcyBJbnN0cnVtZW50cyAKKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDIKKyAqIEdhcnkgSmVubmVqb2huLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCA8Z2pAZGVueC5kZT4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCitPVVRQVVRfRk9STUFUKCJlbGYzMi1saXR0bGVhcm0iLCAiZWxmMzItbGl0dGxlYXJtIiwgImVsZjMyLWxpdHRsZWFybSIpCitPVVRQVVRfQVJDSChhcm0pCitFTlRSWShfc3RhcnQpCitTRUNUSU9OUworeworCS4gPSAweDAwMDAwMDAwOworCisJLiA9IEFMSUdOKDQpOworCS50ZXh0ICAgICAgOgorCXsKKwkgIGNwdS9hcm0xMTM2L3N0YXJ0Lm8JKC50ZXh0KQorCSAgKigudGV4dCkKKwl9CisKKwkuID0gQUxJR04oNCk7CisJLnJvZGF0YSA6IHsgKigucm9kYXRhKSB9CisKKwkuID0gQUxJR04oNCk7CisJLmRhdGEgOiB7ICooLmRhdGEpIH0KKworCS4gPSBBTElHTig0KTsKKwkuZ290IDogeyAqKC5nb3QpIH0KKworCV9fdV9ib290X2NtZF9zdGFydCA9IC47CisJLnVfYm9vdF9jbWQgOiB7ICooLnVfYm9vdF9jbWQpIH0KKwlfX3VfYm9vdF9jbWRfZW5kID0gLjsKKworCS4gPSBBTElHTig0KTsKKwlfX2Jzc19zdGFydCA9IC47CisJLmJzcyA6IHsgKiguYnNzKSB9CisJX2VuZCA9IC47Cit9CmRpZmYgLS1naXQgYS9jb21tb24vZW52X2ZsYXNoLmMgYi9jb21tb24vZW52X2ZsYXNoLmMKaW5kZXggNGU0MmM4Zi4uZDYyNTdkMCAxMDA2NDQKLS0tIGEvY29tbW9uL2Vudl9mbGFzaC5jCisrKyBiL2NvbW1vbi9lbnZfZmxhc2guYwpAQCAtOTksMTEgKzk5LDcgQEAKIGludCAgZW52X2luaXQodm9pZCkKIHsKIAlERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKLQotCWludCBjcmMxX29rID0KLQkJKGNyYzMyKDAsIGZsYXNoX2FkZHItPmRhdGEsIEVOVl9TSVpFKSA9PSBmbGFzaF9hZGRyLT5jcmMpOwotCWludCBjcmMyX29rID0KLQkJKGNyYzMyKDAsIGZsYXNoX2FkZHJfbmV3LT5kYXRhLCBFTlZfU0laRSkgPT0gZmxhc2hfYWRkcl9uZXctPmNyYyk7CisJaW50IGNyYzFfb2sgPSAwLCBjcmMyX29rID0gMDsKIAogCXVjaGFyIGZsYWcxID0gZmxhc2hfYWRkci0+ZmxhZ3M7CiAJdWNoYXIgZmxhZzIgPSBmbGFzaF9hZGRyX25ldy0+ZmxhZ3M7CkBAIC0xMTIsNiArMTA4LDE2IEBACiAJdWxvbmcgYWRkcjEgPSAodWxvbmcpJihmbGFzaF9hZGRyLT5kYXRhKTsKIAl1bG9uZyBhZGRyMiA9ICh1bG9uZykmKGZsYXNoX2FkZHJfbmV3LT5kYXRhKTsKIAorI2lmZGVmIENPTkZJR19PTUFQMjQyMEg0CisJaW50IGZsYXNoX3Byb2JlKHZvaWQpOworCisJaWYoZmxhc2hfcHJvYmUoKSA9PSAwKQorCQlnb3RvIGJhZF9mbGFzaDsKKyNlbmRpZgorCisJY3JjMV9vayA9IChjcmMzMigwLCBmbGFzaF9hZGRyLT5kYXRhLCBFTlZfU0laRSkgPT0gZmxhc2hfYWRkci0+Y3JjKTsKKwljcmMyX29rID0gKGNyYzMyKDAsIGZsYXNoX2FkZHJfbmV3LT5kYXRhLCBFTlZfU0laRSkgPT0gZmxhc2hfYWRkcl9uZXctPmNyYyk7CisKIAlpZiAoY3JjMV9vayAmJiAhIGNyYzJfb2spIHsKIAkJZ2QtPmVudl9hZGRyICA9IGFkZHIxOwogCQlnZC0+ZW52X3ZhbGlkID0gMTsKQEAgLTEzOCw2ICsxNDQsOSBAQAogCQlnZC0+ZW52X3ZhbGlkID0gMjsKIAl9CiAKKyNpZmRlZiBDT05GSUdfT01BUDI0MjBINAorYmFkX2ZsYXNoOgorI2VuZGlmCiAJcmV0dXJuICgwKTsKIH0KIApAQCAtMjUyLDE1ICsyNjEsMjIgQEAKIGludCAgZW52X2luaXQodm9pZCkKIHsKIAlERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKKyNpZmRlZiBDT05GSUdfT01BUDI0MjBINAorCWludCBmbGFzaF9wcm9iZSh2b2lkKTsKIAorCWlmKGZsYXNoX3Byb2JlKCkgPT0gMCkKKwkJZ290byBiYWRfZmxhc2g7CisjZW5kaWYKIAlpZiAoY3JjMzIoMCwgZW52X3B0ci0+ZGF0YSwgRU5WX1NJWkUpID09IGVudl9wdHItPmNyYykgewogCQlnZC0+ZW52X2FkZHIgID0gKHVsb25nKSYoZW52X3B0ci0+ZGF0YSk7CiAJCWdkLT5lbnZfdmFsaWQgPSAxOwotCX0gZWxzZSB7Ci0JCWdkLT5lbnZfYWRkciAgPSAodWxvbmcpJmRlZmF1bHRfZW52aXJvbm1lbnRbMF07Ci0JCWdkLT5lbnZfdmFsaWQgPSAwOworCQlyZXR1cm4oMCk7CiAJfQotCisjaWZkZWYgQ09ORklHX09NQVAyNDIwSDQKK2JhZF9mbGFzaDoKKyNlbmRpZgorCWdkLT5lbnZfYWRkciAgPSAodWxvbmcpJmRlZmF1bHRfZW52aXJvbm1lbnRbMF07CisJZ2QtPmVudl92YWxpZCA9IDA7CiAJcmV0dXJuICgwKTsKIH0KIApkaWZmIC0tZ2l0IGEvY3B1L2FybTExMzYvTWFrZWZpbGUgYi9jcHUvYXJtMTEzNi9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDMyNzhlCi0tLSAvZGV2L251bGwKKysrIGIvY3B1L2FybTExMzYvTWFrZWZpbGUKQEAgLTAsMCArMSw0MyBAQAorIworIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwMworIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgorIworIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworIyBwcm9qZWN0LgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisjIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisjIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorIyBNQSAwMjExMS0xMzA3IFVTQQorIworCitpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKKworTElCCT0gbGliJChDUFUpLmEKKworU1RBUlQJPSBzdGFydC5vCitPQkpTCT0gaW50ZXJydXB0cy5vIGNwdS5vCisKK2FsbDoJLmRlcGVuZCAkKFNUQVJUKSAkKExJQikKKworJChMSUIpOgkkKE9CSlMpCisJJChBUikgY3J2ICRAICQoT0JKUykKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisuZGVwZW5kOglNYWtlZmlsZSAkKFNUQVJUOi5vPS5TKSAkKE9CSlM6Lm89LmMpCisJCSQoQ0MpIC1NICQoQ0ZMQUdTKSAkKFNUQVJUOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKworc2luY2x1ZGUgLmRlcGVuZAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9jcHUvYXJtMTEzNi9jb25maWcubWsgYi9jcHUvYXJtMTEzNi9jb25maWcubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDc3NTE0YQotLS0gL2Rldi9udWxsCisrKyBiL2NwdS9hcm0xMTM2L2NvbmZpZy5tawpAQCAtMCwwICsxLDI1IEBACisjCisjIChDKSBDb3B5cmlnaHQgMjAwMgorIyBHYXJ5IEplbm5lam9obiwgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgPGdqQGRlbnguZGU+CisjCisjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisjIHByb2plY3QuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyMgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyMgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisjIE1BIDAyMTExLTEzMDcgVVNBCisjCitQTEFURk9STV9SRUxGTEFHUyArPSAtZm5vLXN0cmljdC1hbGlhc2luZyAgLWZuby1jb21tb24gLWZmaXhlZC1yOCBcCisKK1BMQVRGT1JNX0NQUEZMQUdTICs9IC1tYXBjcy0zMiAtbWFyY2g9YXJtdjYKZGlmZiAtLWdpdCBhL2NwdS9hcm0xMTM2L2NwdS5jIGIvY3B1L2FybTExMzYvY3B1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGRiMjc1MwotLS0gL2Rldi9udWxsCisrKyBiL2NwdS9hcm0xMTM2L2NwdS5jCkBAIC0wLDAgKzEsMTYzIEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDA0IFRleGFzIEluc3R1cm1lbnRzCisgKgorICogKEMpIENvcHlyaWdodCAyMDAyCisgKiBTeXNnbyBSZWFsLVRpbWUgU29sdXRpb25zLCBHbWJIIDx3d3cuZWxpbm9zLmNvbT4KKyAqIE1hcml1cyBHcm9lZ2VyIDxtZ3JvZWdlckBzeXNnby5kZT4KKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDIKKyAqIEdhcnkgSmVubmVqb2huLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCA8Z2pAZGVueC5kZT4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisvKgorICogQ1BVIHNwZWNpZmljIGNvZGUKKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8Y29tbWFuZC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL29tYXAyNDIwLmg+CisKKy8qIHJlYWQgY28tcHJvY2Vzc29yIDE1LCByZWdpc3RlciAjMSAoY29udHJvbCByZWdpc3RlcikgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIHJlYWRfcDE1X2MxICh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgdmFsdWU7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJCQkJCSJtcmMJcDE1LCAwLCAlMCwgYzEsIGMwLCAwICAgQCByZWFkIGNvbnRyb2wgcmVnXG4iCisJCQkJCQk6ICI9ciIgKHZhbHVlKQorCQkJCQkJOgorCQkJCQkJOiAibWVtb3J5Iik7CisJcmV0dXJuIHZhbHVlOworfQorCisvKiB3cml0ZSB0byBjby1wcm9jZXNzb3IgMTUsIHJlZ2lzdGVyICMxIChjb250cm9sIHJlZ2lzdGVyKSAqLworc3RhdGljIHZvaWQgd3JpdGVfcDE1X2MxICh1bnNpZ25lZCBsb25nIHZhbHVlKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQkJCQkJIm1jcglwMTUsIDAsICUwLCBjMSwgYzAsIDAgICBAIHdyaXRlIGl0IGJhY2tcbiIKKwkJCQkJCToKKwkJCQkJCTogInIiICh2YWx1ZSkKKwkJCQkJCTogIm1lbW9yeSIpOworCisJcmVhZF9wMTVfYzEgKCk7Cit9CisKK3N0YXRpYyB2b2lkIGNwX2RlbGF5ICh2b2lkKQoreworCXZvbGF0aWxlIGludCBpOworCisJLyogTWFueSBPTUFQIHJlZ3MgbmVlZCBhdCBsZWFzdCAyIG5vcHMgICovCisJZm9yIChpID0gMDsgaSA8IDEwMDsgaSsrKTsKK30KKworLyogU2VlIGFsc28gQVJNIFJlZi4gTWFuLiAqLworI2RlZmluZSBDMV9NTVUJCSgxPDwwKQkJLyogbW11IG9mZi9vbiAqLworI2RlZmluZSBDMV9BTElHTgkoMTw8MSkJCS8qIGFsaWdubWVudCBmYXVsdHMgb2ZmL29uICovCisjZGVmaW5lIEMxX0RDCQkoMTw8MikJCS8qIGRjYWNoZSBvZmYvb24gKi8KKyNkZWZpbmUgQzFfV0IJCSgxPDwzKQkJLyogbWVyZ2luZyB3cml0ZSBidWZmZXIgb24vb2ZmICovCisjZGVmaW5lIEMxX0JJR19FTkRJQU4JKDE8PDcpCS8qIGJpZyBlbmRpYW4gb2ZmL29uICovCisjZGVmaW5lIEMxX1NZU19QUk9UCSgxPDw4KQkJLyogc3lzdGVtIHByb3RlY3Rpb24gKi8KKyNkZWZpbmUgQzFfUk9NX1BST1QJKDE8PDkpCQkvKiBST00gcHJvdGVjdGlvbiAqLworI2RlZmluZSBDMV9JQwkJKDE8PDEyKQkJLyogaWNhY2hlIG9mZi9vbiAqLworI2RlZmluZSBDMV9ISUdIX1ZFQ1RPUlMJKDE8PDEzKQkvKiBsb2NhdGlvbiBvZiB2ZWN0b3JzOiBsb3cvaGlnaCBhZGRyZXNzZXMgKi8KKyNkZWZpbmUgUkVTRVJWRURfMQkoMHhmIDw8IDMpCS8qIG11c3QgYmUgMTExYiBmb3IgUi9XICovCisKK2ludCBjcHVfaW5pdCAodm9pZCkKK3sKKwkvKgorCSAqIHNldHVwIHVwIHN0YWNrcyBpZiBuZWNlc3NhcnkKKwkgKi8KKyNpZmRlZiBDT05GSUdfVVNFX0lSUQorCURFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOworCisJSVJRX1NUQUNLX1NUQVJUID0gX2FybWJvb3Rfc3RhcnQgLSBDRkdfTUFMTE9DX0xFTiAtIENGR19HQkxfREFUQV9TSVpFIC0gNDsKKwlGSVFfU1RBQ0tfU1RBUlQgPSBJUlFfU1RBQ0tfU1RBUlQgLSBDT05GSUdfU1RBQ0tTSVpFX0lSUTsKKyNlbmRpZgorCXJldHVybiAwOworfQorCitpbnQgY2xlYW51cF9iZWZvcmVfbGludXggKHZvaWQpCit7CisJLyoKKwkgKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBqdXN0IGJlZm9yZSB3ZSBjYWxsIGxpbnV4CisJICogaXQgcHJlcGFyZXMgdGhlIHByb2Nlc3NvciBmb3IgbGludXgKKwkgKgorCSAqIHdlIHR1cm4gb2ZmIGNhY2hlcyBldGMgLi4uCisJICovCisKKwl1bnNpZ25lZCBsb25nIGk7CisKKwlkaXNhYmxlX2ludGVycnVwdHMgKCk7CisKKyNpZmRlZiBDT05GSUdfTENECisJeworCQlleHRlcm4gdm9pZCBsY2RfZGlzYWJsZSh2b2lkKTsKKwkJZXh0ZXJuIHZvaWQgbGNkX3BhbmVsX2Rpc2FibGUodm9pZCk7CisKKwkJbGNkX2Rpc2FibGUoKTsgLyogcHJvcGVyIGRpc2FibGUgb2YgbGNkICYgcGFuZWwgKi8KKwkJbGNkX3BhbmVsX2Rpc2FibGUoKTsKKwl9CisjZW5kaWYKKworCS8qIHR1cm4gb2ZmIEkvRC1jYWNoZSAqLworCWFzbSAoIm1yYyBwMTUsIDAsICUwLCBjMSwgYzAsIDAiOiI9ciIgKGkpKTsKKwlpICY9IH4oQzFfREMgfCBDMV9JQyk7CisJYXNtICgibWNyIHAxNSwgMCwgJTAsIGMxLCBjMCwgMCI6IDoiciIgKGkpKTsKKworCS8qIGZsdXNoIEkvRC1jYWNoZSAqLworCWkgPSAwOworCWFzbSAoIm1jciBwMTUsIDAsICUwLCBjNywgYzcsIDAiOiA6InIiIChpKSk7ICAvLyBpbnZhbGlkYXRlIGJvdGggY2FjaGVzIGFuZCBmbHVzaCBidGIKKwlhc20gKCJtY3IgcDE1LCAwLCAlMCwgYzcsIGMxMCwgNCI6IDoiciIgKGkpKTsgLy8gbWVtIGJhcnJpZXIgdG8gc3luYyB0aGluZ3MKKwlyZXR1cm4oMCk7Cit9CisKK2ludCBkb19yZXNldCAoY21kX3RibF90ICpjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJZXh0ZXJuIHZvaWQgcmVzZXRfY3B1ICh1bG9uZyBhZGRyKTsKKworCWRpc2FibGVfaW50ZXJydXB0cyAoKTsKKwlyZXNldF9jcHUgKDApOworCS8qTk9UUkVBQ0hFRCovCisJcmV0dXJuKDApOworfQorCit2b2lkIGljYWNoZV9lbmFibGUgKHZvaWQpCit7CisJdWxvbmcgcmVnOworCisJcmVnID0gcmVhZF9wMTVfYzEgKCk7CS8qIGdldCBjb250cm9sIHJlZy4gKi8KKwljcF9kZWxheSAoKTsKKwl3cml0ZV9wMTVfYzEgKHJlZyB8IEMxX0lDKTsKK30KKwordm9pZCBpY2FjaGVfZGlzYWJsZSAodm9pZCkKK3sKKwl1bG9uZyByZWc7CisKKwlyZWcgPSByZWFkX3AxNV9jMSAoKTsKKwljcF9kZWxheSAoKTsKKwl3cml0ZV9wMTVfYzEgKHJlZyAmIH5DMV9JQyk7Cit9CisKK2ludCBpY2FjaGVfc3RhdHVzICh2b2lkKQoreworCXJldHVybihyZWFkX3AxNV9jMSAoKSAmIEMxX0lDKSAhPSAwOworfQpkaWZmIC0tZ2l0IGEvY3B1L2FybTExMzYvaW50ZXJydXB0cy5jIGIvY3B1L2FybTExMzYvaW50ZXJydXB0cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkN2JiN2MKLS0tIC9kZXYvbnVsbAorKysgYi9jcHUvYXJtMTEzNi9pbnRlcnJ1cHRzLmMKQEAgLTAsMCArMSwyOTMgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDQNCisgKiBUZXhhcyBJbnN0cnVtZW50cw0KKyAqIFJpY2hhcmQgV29vZHJ1ZmYgPHItd29vZHJ1ZmYyQHRpLmNvbT4NCisgKgorICogKEMpIENvcHlyaWdodCAyMDAyCisgKiBTeXNnbyBSZWFsLVRpbWUgU29sdXRpb25zLCBHbWJIIDx3d3cuZWxpbm9zLmNvbT4KKyAqIE1hcml1cyBHcm9lZ2VyIDxtZ3JvZWdlckBzeXNnby5kZT4KKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDIKKyAqIFN5c2dvIFJlYWwtVGltZSBTb2x1dGlvbnMsIEdtYkggPHd3dy5lbGlub3MuY29tPgorICogQWxleCBadWVwa2UgPGF6dUBzeXNnby5kZT4KKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDIKKyAqIEdhcnkgSmVubmVqb2huLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCA8Z2pAZGVueC5kZT4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvYml0cy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL29tYXAyNDIwLmg+CisjaW5jbHVkZSA8YXNtL3Byb2MtYXJtdi9wdHJhY2UuaD4KKworZXh0ZXJuIHZvaWQgcmVzZXRfY3B1KHVsb25nIGFkZHIpOworI2RlZmluZSBUSU1FUl9MT0FEX1ZBTCAwCisKKy8qIG1hY3JvIHRvIHJlYWQgdGhlIDMyIGJpdCB0aW1lciAqLworI2RlZmluZSBSRUFEX1RJTUVSICgqKHZvbGF0aWxlIHVsb25nICopKENGR19USU1FUkJBU0UrVENSUikpCisKKyNpZmRlZiBDT05GSUdfVVNFX0lSUQorLyogZW5hYmxlIElSUSBpbnRlcnJ1cHRzICovCit2b2lkIGVuYWJsZV9pbnRlcnJ1cHRzICh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgdGVtcDsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygibXJzICUwLCBjcHNyXG4iCisJCQkJCQkgImJpYyAlMCwgJTAsICMweDgwXG4iCisJCQkJCQkgIm1zciBjcHNyX2MsICUwIgorCQkJCQkJIDogIj1yIiAodGVtcCkKKwkJCQkJCSA6CisJCQkJCQkgOiAibWVtb3J5Iik7Cit9CisKKy8qCisgKiBkaXNhYmxlIElSUS9GSVEgaW50ZXJydXB0cworICogcmV0dXJucyB0cnVlIGlmIGludGVycnVwdHMgaGFkIGJlZW4gZW5hYmxlZCBiZWZvcmUgd2UgZGlzYWJsZWQgdGhlbQorICovCitpbnQgZGlzYWJsZV9pbnRlcnJ1cHRzICh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgb2xkLHRlbXA7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oIm1ycyAlMCwgY3BzclxuIgorCQkJCQkJICJvcnIgJTEsICUwLCAjMHhjMFxuIgorCQkJCQkJICJtc3IgY3Bzcl9jLCAlMSIKKwkJCQkJCSA6ICI9ciIgKG9sZCksICI9ciIgKHRlbXApCisJCQkJCQkgOgorCQkJCQkJIDogIm1lbW9yeSIpOworCXJldHVybihvbGQgJiAweDgwKSA9PSAwOworfQorI2Vsc2UKK3ZvaWQgZW5hYmxlX2ludGVycnVwdHMgKHZvaWQpCit7CisJcmV0dXJuOworfQoraW50IGRpc2FibGVfaW50ZXJydXB0cyAodm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCisKK3ZvaWQgYmFkX21vZGUgKHZvaWQpCit7CisJcGFuaWMgKCJSZXNldHRpbmcgQ1BVIC4uLlxuIik7CisJcmVzZXRfY3B1ICgwKTsKK30KKwordm9pZCBzaG93X3JlZ3MgKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJY29uc3QgY2hhciAqcHJvY2Vzc29yX21vZGVzW10gPSB7CisJCSJVU0VSXzI2IiwgICJGSVFfMjYiLCAgICJJUlFfMjYiLCAgICJTVkNfMjYiLAorCQkiVUs0XzI2IiwgICAiVUs1XzI2IiwgICAiVUs2XzI2IiwgICAiVUs3XzI2IiwKKwkJIlVLOF8yNiIsICAgIlVLOV8yNiIsICAgIlVLMTBfMjYiLCAgIlVLMTFfMjYiLAorCQkiVUsxMl8yNiIsICAiVUsxM18yNiIsICAiVUsxNF8yNiIsICAiVUsxNV8yNiIsCisJCSJVU0VSXzMyIiwgICJGSVFfMzIiLCAgICJJUlFfMzIiLCAgICJTVkNfMzIiLAorCQkiVUs0XzMyIiwgICAiVUs1XzMyIiwgICAiVUs2XzMyIiwgICAiQUJUXzMyIiwKKwkJIlVLOF8zMiIsICAgIlVLOV8zMiIsICAgIlVLMTBfMzIiLCAgIlVORF8zMiIsCisJCSJVSzEyXzMyIiwgICJVSzEzXzMyIiwgICJVSzE0XzMyIiwgICJTWVNfMzIiLAorCX07CisKKwlmbGFncyA9IGNvbmRpdGlvbl9jb2RlcyAocmVncyk7CisKKwlwcmludGYgKCJwYyA6IFs8JTA4bHg+XSAgICBsciA6IFs8JTA4bHg+XVxuIgorCQkJInNwIDogJTA4bHggIGlwIDogJTA4bHggIGZwIDogJTA4bHhcbiIsCisJCQlpbnN0cnVjdGlvbl9wb2ludGVyIChyZWdzKSwKKwkJCXJlZ3MtPkFSTV9sciwgcmVncy0+QVJNX3NwLCByZWdzLT5BUk1faXAsIHJlZ3MtPkFSTV9mcCk7CisJcHJpbnRmICgicjEwOiAlMDhseCAgcjkgOiAlMDhseCAgcjggOiAlMDhseFxuIiwKKwkJCXJlZ3MtPkFSTV9yMTAsIHJlZ3MtPkFSTV9yOSwgcmVncy0+QVJNX3I4KTsKKwlwcmludGYgKCJyNyA6ICUwOGx4ICByNiA6ICUwOGx4ICByNSA6ICUwOGx4ICByNCA6ICUwOGx4XG4iLAorCQkJcmVncy0+QVJNX3I3LCByZWdzLT5BUk1fcjYsIHJlZ3MtPkFSTV9yNSwgcmVncy0+QVJNX3I0KTsKKwlwcmludGYgKCJyMyA6ICUwOGx4ICByMiA6ICUwOGx4ICByMSA6ICUwOGx4ICByMCA6ICUwOGx4XG4iLAorCQkJcmVncy0+QVJNX3IzLCByZWdzLT5BUk1fcjIsIHJlZ3MtPkFSTV9yMSwgcmVncy0+QVJNX3IwKTsKKwlwcmludGYgKCJGbGFnczogJWMlYyVjJWMiLAorCQkJZmxhZ3MgJiBDQ19OX0JJVCA/ICdOJyA6ICduJywKKwkJCWZsYWdzICYgQ0NfWl9CSVQgPyAnWicgOiAneicsCisJCQlmbGFncyAmIENDX0NfQklUID8gJ0MnIDogJ2MnLCBmbGFncyAmIENDX1ZfQklUID8gJ1YnIDogJ3YnKTsKKwlwcmludGYgKCIgIElSUXMgJXMgIEZJUXMgJXMgIE1vZGUgJXMlc1xuIiwKKwkJCWludGVycnVwdHNfZW5hYmxlZCAocmVncykgPyAib24iIDogIm9mZiIsCisJCQlmYXN0X2ludGVycnVwdHNfZW5hYmxlZCAocmVncykgPyAib24iIDogIm9mZiIsCisJCQlwcm9jZXNzb3JfbW9kZXNbcHJvY2Vzc29yX21vZGUgKHJlZ3MpXSwKKwkJCXRodW1iX21vZGUgKHJlZ3MpID8gIiAoVCkiIDogIiIpOworfQorCit2b2lkIGRvX3VuZGVmaW5lZF9pbnN0cnVjdGlvbiAoc3RydWN0IHB0X3JlZ3MgKnB0X3JlZ3MpCit7CisJcHJpbnRmICgidW5kZWZpbmVkIGluc3RydWN0aW9uXG4iKTsKKwlzaG93X3JlZ3MgKHB0X3JlZ3MpOworCWJhZF9tb2RlICgpOworfQorCit2b2lkIGRvX3NvZnR3YXJlX2ludGVycnVwdCAoc3RydWN0IHB0X3JlZ3MgKnB0X3JlZ3MpCit7CisJcHJpbnRmICgic29mdHdhcmUgaW50ZXJydXB0XG4iKTsKKwlzaG93X3JlZ3MgKHB0X3JlZ3MpOworCWJhZF9tb2RlICgpOworfQorCit2b2lkIGRvX3ByZWZldGNoX2Fib3J0IChzdHJ1Y3QgcHRfcmVncyAqcHRfcmVncykKK3sKKwlwcmludGYgKCJwcmVmZXRjaCBhYm9ydFxuIik7CisJc2hvd19yZWdzIChwdF9yZWdzKTsKKwliYWRfbW9kZSAoKTsKK30KKwordm9pZCBkb19kYXRhX2Fib3J0IChzdHJ1Y3QgcHRfcmVncyAqcHRfcmVncykKK3sKKwlwcmludGYgKCJkYXRhIGFib3J0XG4iKTsKKwlzaG93X3JlZ3MgKHB0X3JlZ3MpOworCWJhZF9tb2RlICgpOworfQorCit2b2lkIGRvX25vdF91c2VkIChzdHJ1Y3QgcHRfcmVncyAqcHRfcmVncykKK3sKKwlwcmludGYgKCJub3QgdXNlZFxuIik7CisJc2hvd19yZWdzIChwdF9yZWdzKTsKKwliYWRfbW9kZSAoKTsKK30KKwordm9pZCBkb19maXEgKHN0cnVjdCBwdF9yZWdzICpwdF9yZWdzKQoreworCXByaW50ZiAoImZhc3QgaW50ZXJydXB0IHJlcXVlc3RcbiIpOworCXNob3dfcmVncyAocHRfcmVncyk7CisJYmFkX21vZGUgKCk7Cit9CisKK3ZvaWQgZG9faXJxIChzdHJ1Y3QgcHRfcmVncyAqcHRfcmVncykKK3sKKwlwcmludGYgKCJpbnRlcnJ1cHQgcmVxdWVzdFxuIik7CisJc2hvd19yZWdzIChwdF9yZWdzKTsKKwliYWRfbW9kZSAoKTsKK30KKworc3RhdGljIHVsb25nIHRpbWVzdGFtcDsKK3N0YXRpYyB1bG9uZyBsYXN0aW5jOworCisvKiBub3RoaW5nIHJlYWxseSB0byBkbyB3aXRoIGludGVycnVwdHMsIGp1c3Qgc3RhcnRzIHVwIGEgY291bnRlci4gKi8KK2ludCBpbnRlcnJ1cHRfaW5pdCAodm9pZCkKK3sKKwlpbnQzMl90IHZhbDsKKworCS8qIFN0YXJ0IHRoZSBjb3VudGVyIHRpY2tpbmcgdXAgKi8KKwkqKChpbnQzMl90ICopIChDRkdfVElNRVJCQVNFICsgVExEUikpID0gVElNRVJfTE9BRF9WQUw7CS8qIHJlbG9hZCB2YWx1ZSBvbiBvdmVyZmxvdyovCisJdmFsID0gKENGR19QVlQgPDwgMikgfCBCSVQ1IHwgQklUMSB8IEJJVDA7CQkvKiBtYXNrIHRvIGVuYWJsZSB0aW1lciovCisJKigoaW50MzJfdCAqKSAoQ0ZHX1RJTUVSQkFTRSArIFRDTFIpKSA9IHZhbDsJLyogc3RhcnQgdGltZXIgKi8KKworCXJlc2V0X3RpbWVyX21hc2tlZCgpOyAvKiBpbml0IHRoZSB0aW1lc3RhbXAgYW5kIGxhc3RpbmMgdmFsdWUgKi8KKworCXJldHVybigwKTsKK30KKworLyoKKyAqIHRpbWVyIHdpdGhvdXQgaW50ZXJydXB0cworICovCit2b2lkIHJlc2V0X3RpbWVyICh2b2lkKQoreworCXJlc2V0X3RpbWVyX21hc2tlZCAoKTsKK30KKwordWxvbmcgZ2V0X3RpbWVyICh1bG9uZyBiYXNlKQoreworCXJldHVybiBnZXRfdGltZXJfbWFza2VkICgpIC0gYmFzZTsKK30KKwordm9pZCBzZXRfdGltZXIgKHVsb25nIHQpCit7CisJdGltZXN0YW1wID0gdDsKK30KKworLyogZGVsYXkgeCB1c2Vjb25kcyBBTkQgcGVyc2VydmUgYWR2YW5jZSB0aW1zdGFtcCB2YWx1ZSAqLwordm9pZCB1ZGVsYXkgKHVuc2lnbmVkIGxvbmcgdXNlYykKK3sKKwl1bG9uZyB0bW8sIHRtcDsKKworCWlmICh1c2VjID49IDEwMDApIHsJCQkvKiBpZiAiYmlnIiBudW1iZXIsIHNwcmVhZCBub3JtYWxpemF0aW9uIHRvIHNlY29uZHMgKi8KKwkJdG1vID0gdXNlYyAvIDEwMDA7CQkvKiBzdGFydCB0byBub3JtYWxpemUgZm9yIHVzZWMgdG8gdGlja3MgcGVyIHNlYyAqLworCQl0bW8gKj0gQ0ZHX0haOwkJCS8qIGZpbmQgbnVtYmVyIG9mICJ0aWNrcyIgdG8gd2FpdCB0byBhY2hpZXZlIHRhcmdldCAqLworCQl0bW8gLz0gMTAwMDsJCQkvKiBmaW5pc2ggbm9ybWFsaXplLiAqLworCX0gZWxzZSB7CQkJCQkvKiBlbHNlIHNtYWxsIG51bWJlciwgZG9uJ3Qga2lsbCBpdCBwcmlvciB0byBIWiBtdWx0aXBseSAqLworCQl0bW8gPSB1c2VjICogQ0ZHX0haOworCQl0bW8gLz0gKDEwMDAqMTAwMCk7CisJfQorCisJdG1wID0gZ2V0X3RpbWVyICgwKTsJCS8qIGdldCBjdXJyZW50IHRpbWVzdGFtcCAqLworCWlmICggKHRtbyArIHRtcCArIDEpIDwgdG1wICkvKiBpZiBzZXR0aW5nIHRoaXMgZm9yd2FyZCB3aWxsIHJvbGwgdGltZSBzdGFtcCAqLworCQlyZXNldF90aW1lcl9tYXNrZWQgKCk7CS8qIHJlc2V0ICJhZHZhbmNpbmciIHRpbWVzdGFtcCB0byAwLCBzZXQgbGFzdGluYyB2YWx1ZSAqLworCWVsc2UKKwkJdG1vCSs9IHRtcDsJCQkJLyogZWxzZSwgc2V0IGFkdmFuY2luZyBzdGFtcCB3YWtlIHVwIHRpbWUgKi8KKwl3aGlsZSAoZ2V0X3RpbWVyX21hc2tlZCAoKSA8IHRtbykvKiBsb29wIHRpbGwgZXZlbnQgKi8KKwkJLypOT1AqLzsKK30KKwordm9pZCByZXNldF90aW1lcl9tYXNrZWQgKHZvaWQpCit7CisJLyogcmVzZXQgdGltZSAqLworCWxhc3RpbmMgPSBSRUFEX1RJTUVSOwkJLyogY2FwdHVyZSBjdXJyZW50IGluY3JlbWVudGVyIHZhbHVlIHRpbWUgKi8KKwl0aW1lc3RhbXAgPSAwOwkJCQkvKiBzdGFydCAiYWR2YW5jaW5nIiB0aW1lIHN0YW1wIGZyb20gMCAqLworfQorCit1bG9uZyBnZXRfdGltZXJfbWFza2VkICh2b2lkKQoreworCXVsb25nIG5vdyA9IFJFQURfVElNRVI7CQkvKiBjdXJyZW50IHRpY2sgdmFsdWUgKi8KKworCWlmIChub3cgPj0gbGFzdGluYykJCQkvKiBub3JtYWwgbW9kZSAobm9uIHJvbGwpICovCisJCXRpbWVzdGFtcCArPSAobm93IC0gbGFzdGluYyk7IC8qIG1vdmUgc3RhbXAgZm9yZHdhcmQgd2l0aCBhYnNvdWx0ZSBkaWZmIHRpY2tzICovCisJZWxzZQkJCQkJCS8qIHdlIGhhdmUgcm9sbG92ZXIgb2YgaW5jcmVtZW50ZXIgKi8KKwkJdGltZXN0YW1wICs9ICgweEZGRkZGRkZGIC0gbGFzdGluYykgKyBub3c7CisJbGFzdGluYyA9IG5vdzsKKwlyZXR1cm4gdGltZXN0YW1wOworfQorCisvKiB3YWl0cyBzcGVjaWZpZWQgZGVsYXkgdmFsdWUgYW5kIHJlc2V0cyB0aW1lc3RhbXAgKi8KK3ZvaWQgdWRlbGF5X21hc2tlZCAodW5zaWduZWQgbG9uZyB1c2VjKQoreworCXVsb25nIHRtbzsKKworCWlmICh1c2VjID49IDEwMDApIHsJCQkvKiBpZiAiYmlnIiBudW1iZXIsIHNwcmVhZCBub3JtYWxpemF0aW9uIHRvIHNlY29uZHMgKi8KKwkJdG1vID0gdXNlYyAvIDEwMDA7CQkvKiBzdGFydCB0byBub3JtYWxpemUgZm9yIHVzZWMgdG8gdGlja3MgcGVyIHNlYyAqLworCQl0bW8gKj0gQ0ZHX0haOwkJCS8qIGZpbmQgbnVtYmVyIG9mICJ0aWNrcyIgdG8gd2FpdCB0byBhY2hpZXZlIHRhcmdldCAqLworCQl0bW8gLz0gMTAwMDsJCQkvKiBmaW5pc2ggbm9ybWFsaXplLiAqLworCX0gZWxzZSB7CQkJCQkvKiBlbHNlIHNtYWxsIG51bWJlciwgZG9uJ3Qga2lsbCBpdCBwcmlvciB0byBIWiBtdWx0aXBseSAqLworCQl0bW8gPSB1c2VjICogQ0ZHX0haOworCQl0bW8gLz0gKDEwMDAqMTAwMCk7CisJfQorCXJlc2V0X3RpbWVyX21hc2tlZCAoKTsJCS8qIHNldCAiYWR2YW5jaW5nIiB0aW1lc3RhbXAgdG8gMCwgc2V0IGxhc3RpbmMgdmF1bGUgKi8KKwl3aGlsZSAoZ2V0X3RpbWVyX21hc2tlZCAoKSA8IHRtbykgLyogd2FpdCBmb3IgdGltZSBzdGFtcCB0byBvdmVydGFrZSB0aWNrIG51bWJlci4qLworCQkvKiBOT1AgKi87Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGRlcml2ZWQgZnJvbSBQb3dlclBDIGNvZGUgKHJlYWQgdGltZWJhc2UgYXMgbG9uZyBsb25nKS4KKyAqIE9uIEFSTSBpdCBqdXN0IHJldHVybnMgdGhlIHRpbWVyIHZhbHVlLgorICovCit1bnNpZ25lZCBsb25nIGxvbmcgZ2V0X3RpY2tzKHZvaWQpCit7CisJcmV0dXJuIGdldF90aW1lcigwKTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgZGVyaXZlZCBmcm9tIFBvd2VyUEMgY29kZSAodGltZWJhc2UgY2xvY2sgZnJlcXVlbmN5KS4KKyAqIE9uIEFSTSBpdCByZXR1cm5zIHRoZSBudW1iZXIgb2YgdGltZXIgdGlja3MgcGVyIHNlY29uZC4KKyAqLwordWxvbmcgZ2V0X3RiY2xrICh2b2lkKQoreworCXVsb25nIHRiY2xrOworCXRiY2xrID0gQ0ZHX0haOworCXJldHVybiB0YmNsazsKK30KZGlmZiAtLWdpdCBhL2NwdS9hcm0xMTM2L3N0YXJ0LlMgYi9jcHUvYXJtMTEzNi9zdGFydC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyNmMyN2UKLS0tIC9kZXYvbnVsbAorKysgYi9jcHUvYXJtMTEzNi9zdGFydC5TCkBAIC0wLDAgKzEsNDE0IEBACisvKgorICogIGFybWJvb3QgLSBTdGFydHVwIENvZGUgZm9yIE9NUDI0MjAvQVJNMTEzNiBDUFUtY29yZQorICoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDQgIFRleGFzIEluc3RydW1lbnRzIDxyLXdvb2RydWZmMkB0aS5jb20+CisgKgorICogIENvcHlyaWdodCAoYykgMjAwMQlNYXJpdXMgR3L2Z2VyIDxtYWdAc3lzZ28uZGU+CisgKiAgQ29weXJpZ2h0IChjKSAyMDAyCUFsZXggWvxwa2UgPGF6dUBzeXNnby5kZT4KKyAqICBDb3B5cmlnaHQgKGMpIDIwMDIJR2FyeSBKZW5uZWpvaG4gPGdqQGRlbnguZGU+CisgKiAgQ29weXJpZ2h0IChjKSAyMDAzCVJpY2hhcmQgV29vZHJ1ZmYgPHItd29vZHJ1ZmYyQHRpLmNvbT4KKyAqICBDb3B5cmlnaHQgKGMpIDIwMDMJS3NoaXRpaiA8a3NoaXRpakB0aS5jb20+CisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorI2luY2x1ZGUgPHZlcnNpb24uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9vbWFwMjQyMC5oPgorCisuZ2xvYmwgX3N0YXJ0Citfc3RhcnQ6CWIgICAgICAgcmVzZXQKKwlsZHIJcGMsIF91bmRlZmluZWRfaW5zdHJ1Y3Rpb24KKwlsZHIJcGMsIF9zb2Z0d2FyZV9pbnRlcnJ1cHQKKwlsZHIJcGMsIF9wcmVmZXRjaF9hYm9ydAorCWxkcglwYywgX2RhdGFfYWJvcnQKKwlsZHIJcGMsIF9ub3RfdXNlZAorCWxkcglwYywgX2lycQorCWxkcglwYywgX2ZpcQorCitfdW5kZWZpbmVkX2luc3RydWN0aW9uOgkud29yZCB1bmRlZmluZWRfaW5zdHJ1Y3Rpb24KK19zb2Z0d2FyZV9pbnRlcnJ1cHQ6CS53b3JkIHNvZnR3YXJlX2ludGVycnVwdAorX3ByZWZldGNoX2Fib3J0Ogkud29yZCBwcmVmZXRjaF9hYm9ydAorX2RhdGFfYWJvcnQ6CQkud29yZCBkYXRhX2Fib3J0Citfbm90X3VzZWQ6CQkud29yZCBub3RfdXNlZAorX2lycToJCQkud29yZCBpcnEKK19maXE6CQkJLndvcmQgZmlxCitfcGFkOiAgICAgICAgICAgICAgICAgICAud29yZCAweDEyMzQ1Njc4IC8qIG5vdyAxNio0PTY0ICovIAorLmdsb2JhbCBfZW5kX3ZlY3QKK19lbmRfdmVjdDoKKworCS5iYWxpZ25sIDE2LDB4ZGVhZGJlZWYKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIFN0YXJ0dXAgQ29kZSAocmVzZXQgdmVjdG9yKQorICoKKyAqIGRvIGltcG9ydGFudCBpbml0IG9ubHkgaWYgd2UgZG9uJ3Qgc3RhcnQgZnJvbSBtZW1vcnkhCisgKiBzZXR1cCBNZW1vcnkgYW5kIGJvYXJkIHNwZWNpZmljIGJpdHMgcHJpb3IgdG8gcmVsb2NhdGlvbi4KKyAqIHJlbG9jYXRlIGFybWJvb3QgdG8gcmFtCisgKiBzZXR1cCBzdGFjaworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworX1RFWFRfQkFTRToKKwkud29yZAlURVhUX0JBU0UKKworLmdsb2JsIF9hcm1ib290X3N0YXJ0CitfYXJtYm9vdF9zdGFydDoKKwkud29yZCBfc3RhcnQKKworLyoKKyAqIFRoZXNlIGFyZSBkZWZpbmVkIGluIHRoZSBib2FyZC1zcGVjaWZpYyBsaW5rZXIgc2NyaXB0LgorICovCisuZ2xvYmwgX2Jzc19zdGFydAorX2Jzc19zdGFydDoKKwkud29yZCBfX2Jzc19zdGFydAorCisuZ2xvYmwgX2Jzc19lbmQKK19ic3NfZW5kOgorCS53b3JkIF9lbmQKKworI2lmZGVmIENPTkZJR19VU0VfSVJRCisvKiBJUlEgc3RhY2sgbWVtb3J5IChjYWxjdWxhdGVkIGF0IHJ1bi10aW1lKSAqLworLmdsb2JsIElSUV9TVEFDS19TVEFSVAorSVJRX1NUQUNLX1NUQVJUOgorCS53b3JkCTB4MGJhZGMwZGUKKworLyogSVJRIHN0YWNrIG1lbW9yeSAoY2FsY3VsYXRlZCBhdCBydW4tdGltZSkgKi8KKy5nbG9ibCBGSVFfU1RBQ0tfU1RBUlQKK0ZJUV9TVEFDS19TVEFSVDoKKwkud29yZCAweDBiYWRjMGRlCisjZW5kaWYKKworLyoKKyAqIHRoZSBhY3R1YWwgcmVzZXQgY29kZQorICovCisKK3Jlc2V0OgorCS8qCisJICogc2V0IHRoZSBjcHUgdG8gU1ZDMzIgbW9kZQorCSAqLworCW1ycwlyMCxjcHNyCisJYmljCXIwLHIwLCMweDFmCisJb3JyCXIwLHIwLCMweGQzCisJbXNyCWNwc3IscjAKKworI2lmZGVmIENPTkZJR19PTUFQMjQyMEg0CisgICAgICAgLyogQ29weSB2ZWN0b3JzIHRvIG1hc2sgUk9NIGluZGlyZWN0IGFkZHIgKi8gCisgICAgICAgIGFkciAgICAgcjAsIF9zdGFydCAgICAgICAgICAgICAgLyogcjAgPC0gY3VycmVudCBwb3NpdGlvbiBvZiBjb2RlICAgKi8KKyAgICAgICAgbW92ICAgICByMiwgIzY0ICAgICAgICAgICAgICAgICAvKiByMiA8LSBzaXplIHRvIGNvcHkgICovCisgICAgICAgIGFkZCAgICAgcjIsIHIwLCByMiAgICAgICAgICAgICAgLyogcjIgPC0gc291cmNlIGVuZCBhZGRyZXNzICAgICAgICAgKi8KKyAgICAgICAgbW92ICAgICByMSwgI1NSQU1fT0ZGU0VUMCAgICAgICAgIC8qIGJ1aWxkIHZlY3QgYWRkciAqLworICAgICAgICBtb3YgICAgIHIzLCAjU1JBTV9PRkZTRVQxCisgICAgICAgIGFkZCAgICAgcjEsIHIxLCByMworICAgICAgICBtb3YgICAgIHIzLCAjU1JBTV9PRkZTRVQyCisgICAgICAgIGFkZCAgICAgcjEsIHIxLCByMworbmV4dDoKKyAgICAgICAgbGRtaWEgICByMCEsIHtyMy1yMTB9ICAgICAgICAgICAvKiBjb3B5IGZyb20gc291cmNlIGFkZHJlc3MgW3IwXSAgICAqLworICAgICAgICBzdG1pYSAgIHIxISwge3IzLXIxMH0gICAgICAgICAgIC8qIGNvcHkgdG8gICB0YXJnZXQgYWRkcmVzcyBbcjFdICAgICovCisgICAgICAgIGNtcCAgICAgcjAsIHIyICAgICAgICAgICAgICAgICAgLyogdW50aWwgc291cmNlIGVuZCBhZGRyZXNzIFtyMl0gICAgKi8KKyAgICAgICAgYm5lICAgICBuZXh0ICAgICAgICAgICAgICAgICAgICAvKiBsb29wIHVudGlsIGVxdWFsICovCisjaWZkZWYgQ09ORklHX1BBUlRJQUxfU1JBTQorCWJsCWNweV9jbGtfY29kZSAgICAgICAgICAgIC8qIHB1dCBkcGxsIGFkanVzdCBjb2RlIGJlaGluZCB2ZWN0b3JzICovCisjZW5kaWYKKyNlbmRpZgorCS8qIHRoZSBtYXNrIFJPTSBjb2RlIHNob3VsZCBoYXZlIFBMTCBhbmQgb3RoZXJzIHN0YWJsZSAqLworCWJsICBjcHVfaW5pdF9jcml0CisKK3JlbG9jYXRlOgkJCQkvKiByZWxvY2F0ZSBVLUJvb3QgdG8gUkFNCSAgICAqLworCWFkcglyMCwgX3N0YXJ0CQkvKiByMCA8LSBjdXJyZW50IHBvc2l0aW9uIG9mIGNvZGUgICAqLworCWxkcglyMSwgX1RFWFRfQkFTRQkJLyogdGVzdCBpZiB3ZSBydW4gZnJvbSBmbGFzaCBvciBSQU0gKi8KKwljbXAgICAgIHIwLCByMSAgICAgICAgICAgICAgICAgIC8qIGRvbid0IHJlbG9jIGR1cmluZyBkZWJ1ZyAgICAgICAgICovCisJYmVxICAgICBzdGFja19zZXR1cAorCisJbGRyCXIyLCBfYXJtYm9vdF9zdGFydAorCWxkcglyMywgX2Jzc19zdGFydAorCXN1YglyMiwgcjMsIHIyCQkvKiByMiA8LSBzaXplIG9mIGFybWJvb3QgICAgICAgICAgICAqLworCWFkZAlyMiwgcjAsIHIyCQkvKiByMiA8LSBzb3VyY2UgZW5kIGFkZHJlc3MgICAgICAgICAqLworCitjb3B5X2xvb3A6CisJbGRtaWEJcjAhLCB7cjMtcjEwfQkJLyogY29weSBmcm9tIHNvdXJjZSBhZGRyZXNzIFtyMF0gICAgKi8KKwlzdG1pYQlyMSEsIHtyMy1yMTB9CQkvKiBjb3B5IHRvICAgdGFyZ2V0IGFkZHJlc3MgW3IxXSAgICAqLworCWNtcAlyMCwgcjIJCQkvKiB1bnRpbCBzb3VyY2UgZW5kIGFkZHJlZWUgW3IyXSAgICAqLworCWJsZQljb3B5X2xvb3AKKworCS8qIFNldCB1cCB0aGUgc3RhY2sJCQkJCQkgICAgKi8KK3N0YWNrX3NldHVwOgorCWxkcglyMCwgX1RFWFRfQkFTRQkJLyogdXBwZXIgMTI4IEtpQjogcmVsb2NhdGVkIHVib290ICAgKi8KKwlzdWIJcjAsIHIwLCAjQ0ZHX01BTExPQ19MRU4JLyogbWFsbG9jIGFyZWEgICAgICAgICAgICAgICAgICAgICAgKi8KKwlzdWIJcjAsIHIwLCAjQ0ZHX0dCTF9EQVRBX1NJWkUgLyogYmRpbmZvICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNpZmRlZiBDT05GSUdfVVNFX0lSUQorCXN1YglyMCwgcjAsICMoQ09ORklHX1NUQUNLU0laRV9JUlErQ09ORklHX1NUQUNLU0laRV9GSVEpCisjZW5kaWYKKwlzdWIJc3AsIHIwLCAjMTIJCS8qIGxlYXZlIDMgd29yZHMgZm9yIGFib3J0LXN0YWNrICAgICovCisKK2NsZWFyX2JzczoKKwlsZHIJcjAsIF9ic3Nfc3RhcnQJCS8qIGZpbmQgc3RhcnQgb2YgYnNzIHNlZ21lbnQgICAgICAgICovCisJbGRyCXIxLCBfYnNzX2VuZAkJLyogc3RvcCBoZXJlICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwltb3YgCXIyLCAjMHgwMDAwMDAwMAkJLyogY2xlYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworY2xic3NfbDpzdHIJcjIsIFtyMF0JCS8qIGNsZWFyIGxvb3AuLi4gICAgICAgICAgICAgICAgICAgICovCisJYWRkCXIwLCByMCwgIzQKKwljbXAJcjAsIHIxCisJYm5lCWNsYnNzX2wKKworCWxkcglwYywgX3N0YXJ0X2FybWJvb3QKKworX3N0YXJ0X2FybWJvb3Q6CS53b3JkIHN0YXJ0X2FybWJvb3QKKworCisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDUFVfaW5pdF9jcml0aWNhbCByZWdpc3RlcnMKKyAqCisgKiBzZXR1cCBpbXBvcnRhbnQgcmVnaXN0ZXJzCisgKiBzZXR1cCBtZW1vcnkgdGltaW5nCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworY3B1X2luaXRfY3JpdDoKKwkvKgorCSAqIGZsdXNoIHY0IEkvRCBjYWNoZXMKKwkgKi8KKwltb3YJcjAsICMwCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjNywgMAkvKiBmbHVzaCB2My92NCBjYWNoZSAqLworCW1jcglwMTUsIDAsIHIwLCBjOCwgYzcsIDAJLyogZmx1c2ggdjQgVExCICovCisKKwkvKgorCSAqIGRpc2FibGUgTU1VIHN0dWZmIGFuZCBjYWNoZXMKKwkgKi8KKwltcmMJcDE1LCAwLCByMCwgYzEsIGMwLCAwCisJYmljCXIwLCByMCwgIzB4MDAwMDIzMDAJQCBjbGVhciBiaXRzIDEzLCA5OjggKC0tVi0gLS1SUykKKwliaWMJcjAsIHIwLCAjMHgwMDAwMDA4NwlAIGNsZWFyIGJpdHMgNywgMjowIChCLS0tIC1DQU0pCisJb3JyCXIwLCByMCwgIzB4MDAwMDAwMDIJQCBzZXQgYml0IDIgKEEpIEFsaWduCisjaWZuZGVmIENPTkZJR19JQ0FDSEVfT0ZGCisJb3JyCXIwLCByMCwgIzB4MDAwMDEwMDAJQCBzZXQgYml0IDEyIChJKSBJLUNhY2hlCisjZW5kaWYKKwltY3IJcDE1LCAwLCByMCwgYzEsIGMwLCAwCisKKwkvKgorICAgICAgICAgKiBKdW1wIHRvIGJvYXJkIHNwZWNpZmljIGluaXRpYWxpemF0aW9uLi4uIFRoZSBNYXNrIFJPTSB3aWxsIGhhdmUgYWxyZWFkeSBpbml0aWFsaXplZAorICAgICAgICAgKiBiYXNpYyBtZW1vcnkuICBHbyBoZXJlIHRvIGJ1bXAgdXAgY2xvY2sgcmF0ZSBhbmQgaGFuZGxlIHdha2UgdXAgY29uZGl0aW9ucy4KKwkgKi8KKwlhZHIJcjAsIF9zdGFydAkJLyogcjAgPC0gY3VycmVudCBwb3NpdGlvbiBvZiBjb2RlICAgKi8KKwlsZHIJcjEsIF9URVhUX0JBU0UJCS8qIHRlc3QgaWYgd2UgcnVuIGZyb20gZmxhc2ggb3IgUkFNICovCisJY21wICAgICByMCwgcjEgICAgICAgICAgICAgICAgICAvKiBwYXNzIG9uIGluZm8gYWJvdXQgc2tpcHBpbmcgc29tZSBpbml0IHBvcnRpb25zICovCisgICAgICAgIG1vdmVxICAgcjAsIzB4MSAgICAgICAgICAgICAgICAgLyogZmxhZyB0byBza2lwIHByY20gYW5kIHNkcmMgc2V0dXAgKi8KKyAgICAgICAgbW92bmUgICByMCwjMHgwICAgICAgICAgICAgICAgICAKKwltb3YJaXAsIGxyICAgICAgICAgIC8qIHBlcnNldmVyZSBsaW5rIHJlZyBhY3Jvc3MgY2FsbCAqLworCWJsCXBsYXRmb3Jtc2V0dXAgICAvKiBnbyBzZXR1cCBwbGwsbXV4LG1lbW9yeSAqLworCW1vdglsciwgaXAgICAgICAgICAgLyogcmVzdG9yZSBsaW5rICovCisJbW92CXBjLCBsciAgICAgICAgICAvKiBiYWNrIHRvIG15IGNhbGxlciAqLworLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogSW50ZXJydXB0IGhhbmRsaW5nCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworQAorQCBJUlEgc3RhY2sgZnJhbWUuCitACisjZGVmaW5lIFNfRlJBTUVfU0laRQk3MgorCisjZGVmaW5lIFNfT0xEX1IwCTY4CisjZGVmaW5lIFNfUFNSCQk2NAorI2RlZmluZSBTX1BDCQk2MAorI2RlZmluZSBTX0xSCQk1NgorI2RlZmluZSBTX1NQCQk1MgorCisjZGVmaW5lIFNfSVAJCTQ4CisjZGVmaW5lIFNfRlAJCTQ0CisjZGVmaW5lIFNfUjEwCQk0MAorI2RlZmluZSBTX1I5CQkzNgorI2RlZmluZSBTX1I4CQkzMgorI2RlZmluZSBTX1I3CQkyOAorI2RlZmluZSBTX1I2CQkyNAorI2RlZmluZSBTX1I1CQkyMAorI2RlZmluZSBTX1I0CQkxNgorI2RlZmluZSBTX1IzCQkxMgorI2RlZmluZSBTX1IyCQk4CisjZGVmaW5lIFNfUjEJCTQKKyNkZWZpbmUgU19SMAkJMAorCisjZGVmaW5lIE1PREVfU1ZDIDB4MTMKKyNkZWZpbmUgSV9CSVQJIDB4ODAKKworLyoKKyAqIHVzZSBiYWRfc2F2ZV91c2VyX3JlZ3MgZm9yIGFib3J0L3ByZWZldGNoL3VuZGVmL3N3aSAuLi4KKyAqIHVzZSBpcnFfc2F2ZV91c2VyX3JlZ3MgLyBpcnFfcmVzdG9yZV91c2VyX3JlZ3MgZm9yIElSUS9GSVEgaGFuZGxpbmcKKyAqLworCisJLm1hY3JvCWJhZF9zYXZlX3VzZXJfcmVncworCXN1YglzcCwgc3AsICNTX0ZSQU1FX1NJWkUgICAgICAgICAgIEAgY2FydmUgb3V0IGEgZnJhbWUgb24gY3VycmVudCB1c2VyIHN0YWNrCisJc3RtaWEJc3AsIHtyMCAtIHIxMn0JCQlAIFNhdmUgdXNlciByZWdpc3RlcnMgKG5vdyBpbiBzdmMgbW9kZSkgcjAtcjEyCisKKwlsZHIJcjIsIF9hcm1ib290X3N0YXJ0CisJc3ViCXIyLCByMiwgIyhDRkdfTUFMTE9DX0xFTikKKwlzdWIJcjIsIHIyLCAjKENGR19HQkxfREFUQV9TSVpFKzgpICBAIHNldCBiYXNlIDIgd29yZHMgaW50byBhYm9ydCBzdGFjaworCWxkbWlhCXIyLCB7cjIgLSByM30gICAgICAgICAgICAgICAgICAgQCBnZXQgdmFsdWVzIGZvciAiYWJvcnRlZCIgcGMgYW5kIGNwc3IgKGludG8gcGFybSByZWdzKQorCWFkZAlyMCwgc3AsICNTX0ZSQU1FX1NJWkUJCUAgZ3JhYiBwb2ludGVyIHRvIG9sZCBzdGFjaworCisJYWRkCXI1LCBzcCwgI1NfU1AKKwltb3YJcjEsIGxyCisJc3RtaWEJcjUsIHtyMCAtIHIzfSAgICAgICAgICAgICAgICAgICBAIHNhdmUgc3BfU1ZDLCBscl9TVkMsIHBjLCBjcHNyCisJbW92CXIwLCBzcCAgICAgICAgICAgICAgICAgICAgICAgICAgQCBzYXZlIGN1cnJlbnQgc3RhY2sgaW50byByMCAocGFyYW0gcmVnaXN0ZXIpCisJLmVuZG0KKworCS5tYWNybwlpcnFfc2F2ZV91c2VyX3JlZ3MKKwlzdWIJc3AsIHNwLCAjU19GUkFNRV9TSVpFCisJc3RtaWEJc3AsIHtyMCAtIHIxMn0JCQlAIENhbGxpbmcgcjAtcjEyCisJYWRkICAgICByOCwgc3AsICNTX1BDICAgICAgICAgICAgICAgICAgIEAgISEhISBSOCBORUVEUyB0byBiZSBzYXZlZCAhISEhIGEgcmVzZXJ2ZWQgc3RhY2sgc3BvdCB3b3VsZCBiZSBnb29kLgorCXN0bWRiICAgcjgsIHtzcCwgbHJ9XiAgICAgICAgICAgICAgICAgICBAIENhbGxpbmcgU1AsIExSCisJc3RyICAgICBsciwgW3I4LCAjMF0gICAgICAgICAgICAgICAgICAgIEAgU2F2ZSBjYWxsaW5nIFBDCisJbXJzICAgICByNiwgc3BzcgorCXN0ciAgICAgcjYsIFtyOCwgIzRdICAgICAgICAgICAgICAgICAgICBAIFNhdmUgQ1BTUgorCXN0ciAgICAgcjAsIFtyOCwgIzhdICAgICAgICAgICAgICAgICAgICBAIFNhdmUgT0xEX1IwCisJbW92CXIwLCBzcAorCS5lbmRtCisKKwkubWFjcm8JaXJxX3Jlc3RvcmVfdXNlcl9yZWdzCisJbGRtaWEJc3AsIHtyMCAtIGxyfV4JCQlAIENhbGxpbmcgcjAgLSBscgorCW1vdglyMCwgcjAKKwlsZHIJbHIsIFtzcCwgI1NfUENdCQkJQCBHZXQgUEMKKwlhZGQJc3AsIHNwLCAjU19GUkFNRV9TSVpFCisJc3VicwlwYywgbHIsICM0CQkJQCByZXR1cm4gJiBtb3ZlIHNwc3Jfc3ZjIGludG8gY3BzcgorCS5lbmRtCisKKwkubWFjcm8gZ2V0X2JhZF9zdGFjaworCWxkcglyMTMsIF9hcm1ib290X3N0YXJ0CQlAIHNldHVwIG91ciBtb2RlIHN0YWNrIChlbnRlciBpbiBiYW5rZWQgbW9kZSkKKwlzdWIJcjEzLCByMTMsICMoQ0ZHX01BTExPQ19MRU4pICAgICBAIG1vdmUgcGFzdCBtYWxsb2MgcG9vbAorCXN1YglyMTMsIHIxMywgIyhDRkdfR0JMX0RBVEFfU0laRSs4KSBAIG1vdmUgdG8gcmVzZXJ2ZWQgYSBjb3VwbGUgc3BvdHMgZm9yIGFib3J0IHN0YWNrCisKKwlzdHIJbHIsIFtyMTNdCQkJQCBzYXZlIGNhbGxlciBsciBpbiBwb3NpdGlvbiAwIG9mIHNhdmVkIHN0YWNrCisJbXJzCWxyLCBzcHNyICAgICAgICAgICAgICAgICAgICAgICAgQCBnZXQgdGhlIHNwc3IKKwlzdHIgICAgIGxyLCBbcjEzLCAjNF0gICAgICAgICAgICAgICAgICAgQCBzYXZlIHNwc3IgaW4gcG9zaXRpb24gMSBvZiBzYXZlZCBzdGFjaworCisJbW92CXIxMywgI01PREVfU1ZDCQkJQCBwcmVwYXJlIFNWQy1Nb2RlCisJQCBtc3IJc3Bzcl9jLCByMTMKKwltc3IJc3BzciwgcjEzICAgICAgICAgICAgICAgICAgICAgICBAIHN3aXRjaCBtb2RlcywgbWFrZSBzdXJlIG1vdmVzIHdpbGwgZXhlY3V0ZQorCW1vdglsciwgcGMgICAgICAgICAgICAgICAgICAgICAgICAgIEAgY2FwdHVyZSByZXR1cm4gcGMKKwltb3ZzCXBjLCBsciAgICAgICAgICAgICAgICAgICAgICAgICAgQCBqdW1wIHRvIG5leHQgaW5zdHJ1Y3Rpb24gJiBzd2l0Y2ggbW9kZXMuCisJLmVuZG0KKworCS5tYWNybyBnZXRfYmFkX3N0YWNrX3N3aQorICAgICAgICBzdWIgICAgIHIxMywgcjEzLCAjNCAgICAgICAgICAgICAgICAgICAgQCBzcGFjZSBvbiBjdXJyZW50IHN0YWNrIGZvciBzY3JhdGNoIHJlZy4KKyAgICAgICAgc3RyICAgICByMCwgW3IxM10gICAgICAgICAgICAgICAgICAgICAgIEAgc2F2ZSBSMCdzIHZhbHVlLgorCWxkcglyMCwgX2FybWJvb3Rfc3RhcnQJCUAgZ2V0IGRhdGEgcmVnaW9ucyBzdGFydAorCXN1YglyMCwgcjAsICMoQ0ZHX01BTExPQ19MRU4pICAgICAgIEAgbW92ZSBwYXN0IG1hbGxvYyBwb29sCisJc3ViCXIwLCByMCwgIyhDRkdfR0JMX0RBVEFfU0laRSs4KSAgQCBtb3ZlIHBhc3QgZ2JsIGFuZCBhIGNvdXBsZSBzcG90cyBmb3IgYWJvcnQgc3RhY2sKKwlzdHIJbHIsIFtyMF0JCQlAIHNhdmUgY2FsbGVyIGxyIGluIHBvc2l0aW9uIDAgb2Ygc2F2ZWQgc3RhY2sKKwltcnMJcjAsIHNwc3IgICAgICAgICAgICAgICAgICAgICAgICBAIGdldCB0aGUgc3BzcgorCXN0ciAgICAgbHIsIFtyMCwgIzRdICAgICAgICAgICAgICAgICAgICBAIHNhdmUgc3BzciBpbiBwb3NpdGlvbiAxIG9mIHNhdmVkIHN0YWNrCisgICAgICAgIGxkciAgICAgcjAsIFtyMTNdICAgICAgICAgICAgICAgICAgICAgICBAIHJlc3RvcmUgcjAKKyAgICAgICAgYWRkICAgICByMTMsIHIxMywgIzQgICAgICAgICAgICAgICAgICAgIEAgcG9wIHN0YWNrIGVudHJ5CisJLmVuZG0KKworCS5tYWNybyBnZXRfaXJxX3N0YWNrCQkJQCBzZXR1cCBJUlEgc3RhY2sKKwlsZHIJc3AsIElSUV9TVEFDS19TVEFSVAorCS5lbmRtCisKKwkubWFjcm8gZ2V0X2ZpcV9zdGFjawkJCUAgc2V0dXAgRklRIHN0YWNrCisJbGRyCXNwLCBGSVFfU1RBQ0tfU1RBUlQKKwkuZW5kbQorCisvKgorICogZXhjZXB0aW9uIGhhbmRsZXJzCisgKi8KKwkuYWxpZ24gIDUKK3VuZGVmaW5lZF9pbnN0cnVjdGlvbjoKKwlnZXRfYmFkX3N0YWNrCisJYmFkX3NhdmVfdXNlcl9yZWdzCisJYmwgCWRvX3VuZGVmaW5lZF9pbnN0cnVjdGlvbgorCisJLmFsaWduCTUKK3NvZnR3YXJlX2ludGVycnVwdDoKKwlnZXRfYmFkX3N0YWNrX3N3aQorCWJhZF9zYXZlX3VzZXJfcmVncworCWJsIAlkb19zb2Z0d2FyZV9pbnRlcnJ1cHQKKworCS5hbGlnbgk1CitwcmVmZXRjaF9hYm9ydDoKKwlnZXRfYmFkX3N0YWNrCisJYmFkX3NhdmVfdXNlcl9yZWdzCisJYmwgCWRvX3ByZWZldGNoX2Fib3J0CisKKwkuYWxpZ24JNQorZGF0YV9hYm9ydDoKKwlnZXRfYmFkX3N0YWNrCisJYmFkX3NhdmVfdXNlcl9yZWdzCisJYmwgCWRvX2RhdGFfYWJvcnQKKworCS5hbGlnbgk1Citub3RfdXNlZDoKKwlnZXRfYmFkX3N0YWNrCisJYmFkX3NhdmVfdXNlcl9yZWdzCisJYmwgCWRvX25vdF91c2VkCisKKyNpZmRlZiBDT05GSUdfVVNFX0lSUQorCisJLmFsaWduCTUKK2lycToKKwlnZXRfaXJxX3N0YWNrCisJaXJxX3NhdmVfdXNlcl9yZWdzCisJYmwgCWRvX2lycQorCWlycV9yZXN0b3JlX3VzZXJfcmVncworCisJLmFsaWduCTUKK2ZpcToKKwlnZXRfZmlxX3N0YWNrCisJLyogc29tZW9uZSBvdWdodCB0byB3cml0ZSBhIG1vcmUgZWZmaWN0aW9uIGZpcV9zYXZlX3VzZXJfcmVncyAqLworCWlycV9zYXZlX3VzZXJfcmVncworCWJsIAlkb19maXEKKwlpcnFfcmVzdG9yZV91c2VyX3JlZ3MKKworI2Vsc2UKKworCS5hbGlnbgk1CitpcnE6CisJZ2V0X2JhZF9zdGFjaworCWJhZF9zYXZlX3VzZXJfcmVncworCWJsIAlkb19pcnEKKworCS5hbGlnbgk1CitmaXE6CisJZ2V0X2JhZF9zdGFjaworCWJhZF9zYXZlX3VzZXJfcmVncworCWJsIAlkb19maXEKKworI2VuZGlmCisJLmFsaWduIDUKKy5nbG9iYWwgYXJtMTEzNl9jYWNoZV9mbHVzaAorYXJtMTEzNl9jYWNoZV9mbHVzaDoKKwkJbWNyCXAxNSwgMCwgcjEsIGM3LCBjNSwgMAlAIGludmFsaWRhdGUgSSBjYWNoZQorCQltb3YJcGMsIGxyCQkJQCBiYWNrIHRvIGNhbGxlcgorCisJLmFsaWduCTUKKy5nbG9ibCByZXNldF9jcHUKK3Jlc2V0X2NwdToKKwlsZHIJcjEsIHJzdGN0bCAgICAgIC8qIGdldCBhZGRyIGZvciBnbG9iYWwgcmVzZXQgcmVnICovCisJbW92ICAgICByMywgIzB4MwkvKiBmdWxsIHJlc2V0IHBsbCttcHUgKi8KKwlzdHIJcjMsIFtyMV0gICAgICAgIC8qIGZvcmNlIHJlc2V0ICovCisJbW92CXIwLCByMAorX2xvb3BfZm9yZXZlcjoKKwliCV9sb29wX2ZvcmV2ZXIKK3JzdGN0bDoKKwkud29yZAlQTV9SU1RDVFJMX1dLVVAKZGlmZiAtLWdpdCBhL2RvYy9SRUFETUUubmUyMDAwIGIvZG9jL1JFQURNRS5uZTIwMDAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDVhZTlhOQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9SRUFETUUubmUyMDAwCkBAIC0wLDAgKzEsMzggQEAKK1RoaXMgZHJpdmVyIHN1cHBvcnRzIE5FMjAwMCBjb21wYXRpYmxlIGNhcmRzICh0aG9zZSBiYXNlZCBvbiBEUDgzOTAsCitEUDgzOTAyIGFuZCBzaW1pbGFyKS4gSXQgY2FuIGJlIHVzZWQgd2l0aCBQQ01DSUEvQ0YgY2FyZHMgcHJvdmlkZWQKK3RoYXQgdGhlIENDUiBpcyBjb3JyZWN0bHkgaW5pdGlhbGl6ZWQuCisKK1RoZSBjb2RlIGlzIGJhc2VkIG9uIHNvdXJjZXMgZnJvbSB0aGUgTGludXgga2VybmVsIChwY25ldF9jcy5jLAorODM5MC5oKSBhbmQgZUNPUyhpZl9kcDgzOTAyYS5jLCBpZl9kcDgzOTAyYS5oKS4gQm90aCBvZiB0aGVzZSAyCit3b25kZXJmdWwgd29ybGQgYXJlIEdQTCwgc28gdGhpcyBpcywgb2YgY291cnNlLCBHUEwuCisKK0kgZGV2ZWxvcGVkIGFuZCB0ZXN0ZWQgdGhpcyBkcml2ZXIgb24gYSBjdXN0b20gUFhBMjU1IGJhc2VkIHN5c3RlbSBhbmQKK3dpdGggYSBiaWxsaW9udG9uIENGIG5ldHdvcmsgY2FyZCBjb25uZWN0ZWQgdG8gdGhlIFBDTUNJQSBpbnRlcmZhY2Ugb2YKK3RoZSBtaWNybyAoaGF2ZSBhIGxvb2sgYXQgUkVBRE1FLlBYQV9DRiBmb3IgdGhlIHN1cHBvcnQgb2YgdGhpcyBwb3J0KS4KKworVGhlIG9wdGlvbnMgeW91IGhhdmUgdG8gc3BlY2lmeSBpbiB0aGUgY29uZmlnIGZpbGUgYXJlICh3aXRoIHRoZQordmFsdWUgZm9yIG15IGJvYXJkIGFzIGFuIGV4YW1wbGUpOgorCisjZGVmaW5lIENPTkZJR19EUklWRVJfTkUyMDAwCisKKy0gRW5hYmxlcyB0aGUgZHJpdmVyCisKKyNkZWZpbmUgQ09ORklHX0RSSVZFUl9ORTIwMDBfQkFTRSAoMHgyMDAwMDAwMCsweDMwMCkKKworLSBBZGRyZXNzIHdoZXJlIHRoZSBib2FyZCBpcyBtYXBwZWQKKworI2RlZmluZSBDT05GSUdfRFJJVkVSX05FMjAwMF9DQ1IgKDB4MjgwMDAwMDArMHgzZjgpCisKKy0gQWRkcmVzcyBvZiB0aGUgQ0NSIChjYXJkIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIpLiBJdCBjb3VsZCBiZSBmb3VuZAorYnkgZW5hYmxpbmcgREVCVUcgaW4gY21kX3BjbWNpYS5jLiBJZiB0aGlzIGlzIG5vdCBkZWZpbmVkIG5vdGhpbmcgaXMKK2RvbmUgYXMgZmFyIGFzIFBDTUNJQSBzdXBwb3J0IGlzIGNvbmNlcm5lZC4KKworI2RlZmluZSBDT05GSUdfRFJJVkVSX05FMjAwMF9WQUwgKDB4MjApCisKKy0gVGhlIHZhbHVlIHRvIGJlIHdyaXR0ZW4gaW4gdGhlIENDUi4gSXQgc2VsZWN0cyBhbW9uZyBkaWZmZXJlbnQgSS9PCitzcGFjZXMgdGhhdCBjb3VsZCBiZSB1c2VkIGJ5IHRoZSBjYXJkLgorCisKK0Vuam95IQorCitDaHJpc3RpYW4gUGVsbGVncmluIDxjaHJpQGFzY2Vuc2l0LmNvbT4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvODM5MC5oIGIvZHJpdmVycy84MzkwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGUzY2RkMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvODM5MC5oCkBAIC0wLDAgKzEsMTI2IEBACisvKgorCitQb3J0ZWQgdG8gVS1Cb290ICBieSBDaHJpc3RpYW4gUGVsbGVncmluIDxjaHJpQGFzY2Vuc2l0LmNvbT4KKworQmFzZWQgb24gc291cmNlcyBmcm9tIHRoZSBMaW51eCBrZXJuZWwgKHBjbmV0X2NzLmMsIDgzOTAuaCkgYW5kCitlQ09TKGlmX2RwODM5MDJhLmMsIGlmX2RwODM5MDJhLmgpLiBCb3RoIG9mIHRoZXNlIDIgd29uZGVyZnVsIHdvcmxkCithcmUgR1BMLCBzbyB0aGlzIGlzLCBvZiBjb3Vyc2UsIEdQTC4KKworKi8KKworLyogR2VuZXJpYyBOUzgzOTAgcmVnaXN0ZXIgZGVmaW5pdGlvbnMuICovCisvKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBEb25hbGQgQmVja2VyJ3MgODM5MCBkcml2ZXJzLCBhbmQgaXMgZGlzdHJpYnV0ZWQKKyAgIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UuIEF1dG8tbG9hZGluZyBvZiA4MzkwLm8gb25seSBpbiB2Mi4yIC0gUGF1bCBHLgorICAgU29tZSBvZiB0aGVzZSBuYW1lcyBhbmQgY29tbWVudHMgb3JpZ2luYXRlZCBmcm9tIHRoZSBDcnlud3IKKyAgIHBhY2tldCBkcml2ZXJzLCB3aGljaCBhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEdQTC4gKi8KKworI2lmbmRlZiBfODM5MF9oCisjZGVmaW5lIF84MzkwX2gKKworLyogU29tZSBnZW5lcmljIGV0aGVybmV0IHJlZ2lzdGVyIGNvbmZpZ3VyYXRpb25zLiAqLworI2RlZmluZSBFODM5MF9UWF9JUlFfTUFTSwkweGEJLyogRm9yIHJlZ2lzdGVyIEVOMF9JU1IgKi8KKyNkZWZpbmUgRTgzOTBfUlhfSVJRX01BU0sJMHg1CisjZGVmaW5lIEU4MzkwX1JYQ09ORklHCQkweDQJLyogRU4wX1JYQ1I6IGJyb2FkY2FzdHMsIG5vIG11bHRpY2FzdCxlcnJvcnMgKi8KKyNkZWZpbmUgRTgzOTBfUlhPRkYJCTB4MjAJLyogRU4wX1JYQ1I6IEFjY2VwdCBubyBwYWNrZXRzICovCisjZGVmaW5lIEU4MzkwX1RYQ09ORklHCQkweDAwCS8qIEVOMF9UWENSOiBOb3JtYWwgdHJhbnNtaXQgbW9kZSAqLworI2RlZmluZSBFODM5MF9UWE9GRgkJMHgwMgkvKiBFTjBfVFhDUjogVHJhbnNtaXR0ZXIgb2ZmICovCisKKy8qICBSZWdpc3RlciBhY2Nlc3NlZCBhdCBFTl9DTUQsIHRoZSA4MzkwIGJhc2UgYWRkci4gICovCisjZGVmaW5lIEU4MzkwX1NUT1AJMHgwMQkvKiBTdG9wIGFuZCByZXNldCB0aGUgY2hpcCAqLworI2RlZmluZSBFODM5MF9TVEFSVAkweDAyCS8qIFN0YXJ0IHRoZSBjaGlwLCBjbGVhciByZXNldCAqLworI2RlZmluZSBFODM5MF9UUkFOUwkweDA0CS8qIFRyYW5zbWl0IGEgZnJhbWUgKi8KKyNkZWZpbmUgRTgzOTBfUlJFQUQJMHgwOAkvKiBSZW1vdGUgcmVhZCAqLworI2RlZmluZSBFODM5MF9SV1JJVEUJMHgxMAkvKiBSZW1vdGUgd3JpdGUgICovCisjZGVmaW5lIEU4MzkwX05PRE1BCTB4MjAJLyogUmVtb3RlIERNQSAqLworI2RlZmluZSBFODM5MF9QQUdFMAkweDAwCS8qIFNlbGVjdCBwYWdlIGNoaXAgcmVnaXN0ZXJzICovCisjZGVmaW5lIEU4MzkwX1BBR0UxCTB4NDAJLyogdXNpbmcgdGhlIHR3byBoaWdoLW9yZGVyIGJpdHMgKi8KKyNkZWZpbmUgRTgzOTBfUEFHRTIJMHg4MAkvKiBQYWdlIDMgaXMgaW52YWxpZC4gKi8KKworLyoKKyAqCU9ubHkgZ2VuZXJhdGUgaW5kaXJlY3QgbG9hZHMgZ2l2ZW4gYSBtYWNoaW5lIHRoYXQgbmVlZHMgdGhlbS4KKyAqICAgICAgLSByZW1vdmVkIEFNSUdBX1BDTUNJQSBmcm9tIHRoaXMgbGlzdCwgaGFuZGxlZCBhcyBJU0EgaW8gbm93CisgKi8KKworI2RlZmluZSBuMmtfaW5iKHBvcnQpICAgKCooKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikocG9ydCtDT05GSUdfRFJJVkVSX05FMjAwMF9CQVNFKSkpCisjZGVmaW5lIG4ya19vdXRiKHZhbCxwb3J0KSAgKCooKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikocG9ydCtDT05GSUdfRFJJVkVSX05FMjAwMF9CQVNFKSkgPSB2YWwpCisKKyNkZWZpbmUgRUlfU0hJRlQoeCkJKHgpCisKKyNkZWZpbmUgRTgzOTBfQ01ECUVJX1NISUZUKDB4MDApICAvKiBUaGUgY29tbWFuZCByZWdpc3RlciAoZm9yIGFsbCBwYWdlcykgKi8KKy8qIFBhZ2UgMCByZWdpc3RlciBvZmZzZXRzLiAqLworI2RlZmluZSBFTjBfQ0xEQUxPCUVJX1NISUZUKDB4MDEpCS8qIExvdyBieXRlIG9mIGN1cnJlbnQgbG9jYWwgZG1hIGFkZHIgIFJEICovCisjZGVmaW5lIEVOMF9TVEFSVFBHCUVJX1NISUZUKDB4MDEpCS8qIFN0YXJ0aW5nIHBhZ2Ugb2YgcmluZyBiZnIgV1IgKi8KKyNkZWZpbmUgRU4wX0NMREFISQlFSV9TSElGVCgweDAyKQkvKiBIaWdoIGJ5dGUgb2YgY3VycmVudCBsb2NhbCBkbWEgYWRkciAgUkQgKi8KKyNkZWZpbmUgRU4wX1NUT1BQRwlFSV9TSElGVCgweDAyKQkvKiBFbmRpbmcgcGFnZSArMSBvZiByaW5nIGJmciBXUiAqLworI2RlZmluZSBFTjBfQk9VTkRBUlkJRUlfU0hJRlQoMHgwMykJLyogQm91bmRhcnkgcGFnZSBvZiByaW5nIGJmciBSRCBXUiAqLworI2RlZmluZSBFTjBfVFNSCQlFSV9TSElGVCgweDA0KQkvKiBUcmFuc21pdCBzdGF0dXMgcmVnIFJEICovCisjZGVmaW5lIEVOMF9UUFNSCUVJX1NISUZUKDB4MDQpCS8qIFRyYW5zbWl0IHN0YXJ0aW5nIHBhZ2UgV1IgKi8KKyNkZWZpbmUgRU4wX05DUgkJRUlfU0hJRlQoMHgwNSkJLyogTnVtYmVyIG9mIGNvbGxpc2lvbiByZWcgUkQgKi8KKyNkZWZpbmUgRU4wX1RDTlRMTwlFSV9TSElGVCgweDA1KQkvKiBMb3cgIGJ5dGUgb2YgdHggYnl0ZSBjb3VudCBXUiAqLworI2RlZmluZSBFTjBfRklGTwlFSV9TSElGVCgweDA2KQkvKiBGSUZPIFJEICovCisjZGVmaW5lIEVOMF9UQ05USEkJRUlfU0hJRlQoMHgwNikJLyogSGlnaCBieXRlIG9mIHR4IGJ5dGUgY291bnQgV1IgKi8KKyNkZWZpbmUgRU4wX0lTUgkJRUlfU0hJRlQoMHgwNykJLyogSW50ZXJydXB0IHN0YXR1cyByZWcgUkQgV1IgKi8KKyNkZWZpbmUgRU4wX0NSREFMTwlFSV9TSElGVCgweDA4KQkvKiBsb3cgYnl0ZSBvZiBjdXJyZW50IHJlbW90ZSBkbWEgYWRkcmVzcyBSRCAqLworI2RlZmluZSBFTjBfUlNBUkxPCUVJX1NISUZUKDB4MDgpCS8qIFJlbW90ZSBzdGFydCBhZGRyZXNzIHJlZyAwICovCisjZGVmaW5lIEVOMF9DUkRBSEkJRUlfU0hJRlQoMHgwOSkJLyogaGlnaCBieXRlLCBjdXJyZW50IHJlbW90ZSBkbWEgYWRkcmVzcyBSRCAqLworI2RlZmluZSBFTjBfUlNBUkhJCUVJX1NISUZUKDB4MDkpCS8qIFJlbW90ZSBzdGFydCBhZGRyZXNzIHJlZyAxICovCisjZGVmaW5lIEVOMF9SQ05UTE8JRUlfU0hJRlQoMHgwYSkJLyogUmVtb3RlIGJ5dGUgY291bnQgcmVnIFdSICovCisjZGVmaW5lIEVOMF9SQ05USEkJRUlfU0hJRlQoMHgwYikJLyogUmVtb3RlIGJ5dGUgY291bnQgcmVnIFdSICovCisjZGVmaW5lIEVOMF9SU1IJCUVJX1NISUZUKDB4MGMpCS8qIHJ4IHN0YXR1cyByZWcgUkQgKi8KKyNkZWZpbmUgRU4wX1JYQ1IJRUlfU0hJRlQoMHgwYykJLyogUlggY29uZmlndXJhdGlvbiByZWcgV1IgKi8KKyNkZWZpbmUgRU4wX1RYQ1IJRUlfU0hJRlQoMHgwZCkJLyogVFggY29uZmlndXJhdGlvbiByZWcgV1IgKi8KKyNkZWZpbmUgRU4wX0NPVU5URVIwCUVJX1NISUZUKDB4MGQpCS8qIFJjdiBhbGlnbm1lbnQgZXJyb3IgY291bnRlciBSRCAqLworI2RlZmluZSBFTjBfRENGRwlFSV9TSElGVCgweDBlKQkvKiBEYXRhIGNvbmZpZ3VyYXRpb24gcmVnIFdSICovCisjZGVmaW5lIEVOMF9DT1VOVEVSMQlFSV9TSElGVCgweDBlKQkvKiBSY3YgQ1JDIGVycm9yIGNvdW50ZXIgUkQgKi8KKyNkZWZpbmUgRU4wX0lNUgkJRUlfU0hJRlQoMHgwZikJLyogSW50ZXJydXB0IG1hc2sgcmVnIFdSICovCisjZGVmaW5lIEVOMF9DT1VOVEVSMglFSV9TSElGVCgweDBmKQkvKiBSY3YgbWlzc2VkIGZyYW1lIGVycm9yIGNvdW50ZXIgUkQgKi8KKworLyogQml0cyBpbiBFTjBfSVNSIC0gSW50ZXJydXB0IHN0YXR1cyByZWdpc3RlciAqLworI2RlZmluZSBFTklTUl9SWAkweDAxCS8qIFJlY2VpdmVyLCBubyBlcnJvciAqLworI2RlZmluZSBFTklTUl9UWAkweDAyCS8qIFRyYW5zbWl0dGVyLCBubyBlcnJvciAqLworI2RlZmluZSBFTklTUl9SWF9FUlIJMHgwNAkvKiBSZWNlaXZlciwgd2l0aCBlcnJvciAqLworI2RlZmluZSBFTklTUl9UWF9FUlIJMHgwOAkvKiBUcmFuc21pdHRlciwgd2l0aCBlcnJvciAqLworI2RlZmluZSBFTklTUl9PVkVSCTB4MTAJLyogUmVjZWl2ZXIgb3Zlcndyb3RlIHRoZSByaW5nICovCisjZGVmaW5lIEVOSVNSX0NPVU5URVJTCTB4MjAJLyogQ291bnRlcnMgbmVlZCBlbXB0eWluZyAqLworI2RlZmluZSBFTklTUl9SREMJMHg0MAkvKiByZW1vdGUgZG1hIGNvbXBsZXRlICovCisjZGVmaW5lIEVOSVNSX1JFU0VUCTB4ODAJLyogUmVzZXQgY29tcGxldGVkICovCisjZGVmaW5lIEVOSVNSX0FMTAkweDNmCS8qIEludGVycnVwdHMgd2Ugd2lsbCBlbmFibGUgKi8KKworLyogQml0cyBpbiBFTjBfRENGRyAtIERhdGEgY29uZmlnIHJlZ2lzdGVyICovCisjZGVmaW5lIEVORENGR19XVFMJMHgwMQkvKiB3b3JkIHRyYW5zZmVyIG1vZGUgc2VsZWN0aW9uICovCisjZGVmaW5lIEVORENGR19CT1MJMHgwMgkvKiBieXRlIG9yZGVyIHNlbGVjdGlvbiAqLworI2RlZmluZSBFTkRDRkdfQVVUT19JTklUICAgMHgxMCAgICAgICAgLyogQXV0by1pbml0IHRvIHJlbW92ZSBwYWNrZXRzIGZyb20gcmluZyAqLworI2RlZmluZSBFTkRDRkdfRklGTwkJMHg0MAkvKiA4IGJ5dGVzICovCisKKworCisvKiBQYWdlIDEgcmVnaXN0ZXIgb2Zmc2V0cy4gKi8KKyNkZWZpbmUgRU4xX1BIWVMgICBFSV9TSElGVCgweDAxKQkvKiBUaGlzIGJvYXJkJ3MgcGh5c2ljYWwgZW5ldCBhZGRyIFJEIFdSICovCisjZGVmaW5lIEVOMV9QSFlTX1NISUZUKGkpICBFSV9TSElGVChpKzEpIC8qIEdldCBhbmQgc2V0IG1hYyBhZGRyZXNzICovCisjZGVmaW5lIEVOMV9DVVJQQUcgRUlfU0hJRlQoMHgwNykJLyogQ3VycmVudCBtZW1vcnkgcGFnZSBSRCBXUiAqLworI2RlZmluZSBFTjFfTVVMVCAgIEVJX1NISUZUKDB4MDgpCS8qIE11bHRpY2FzdCBmaWx0ZXIgbWFzayBhcnJheSAoOCBieXRlcykgUkQgV1IgKi8KKyNkZWZpbmUgRU4xX01VTFRfU0hJRlQoaSkgIEVJX1NISUZUKDgraSkgLyogR2V0IGFuZCBzZXQgbXVsdGljYXN0IGZpbHRlciAqLworCisvKiBCaXRzIGluIHJlY2VpdmVkIHBhY2tldCBzdGF0dXMgYnl0ZSBhbmQgRU4wX1JTUiovCisjZGVmaW5lIEVOUlNSX1JYT0sJMHgwMQkvKiBSZWNlaXZlZCBhIGdvb2QgcGFja2V0ICovCisjZGVmaW5lIEVOUlNSX0NSQwkweDAyCS8qIENSQyBlcnJvciAqLworI2RlZmluZSBFTlJTUl9GQUUJMHgwNAkvKiBmcmFtZSBhbGlnbm1lbnQgZXJyb3IgKi8KKyNkZWZpbmUgRU5SU1JfRk8JMHgwOAkvKiBGSUZPIG92ZXJydW4gKi8KKyNkZWZpbmUgRU5SU1JfTVBBCTB4MTAJLyogbWlzc2VkIHBrdCAqLworI2RlZmluZSBFTlJTUl9QSFkJMHgyMAkvKiBwaHlzaWNhbC9tdWx0aWNhc3QgYWRkcmVzcyAqLworI2RlZmluZSBFTlJTUl9ESVMJMHg0MAkvKiByZWNlaXZlciBkaXNhYmxlLiBzZXQgaW4gbW9uaXRvciBtb2RlICovCisjZGVmaW5lIEVOUlNSX0RFRgkweDgwCS8qIGRlZmVycmluZyAqLworCisvKiBUcmFuc21pdHRlZCBwYWNrZXQgc3RhdHVzLCBFTjBfVFNSLiAqLworI2RlZmluZSBFTlRTUl9QVFggMHgwMQkvKiBQYWNrZXQgdHJhbnNtaXR0ZWQgd2l0aG91dCBlcnJvciAqLworI2RlZmluZSBFTlRTUl9ORCAgMHgwMgkvKiBUaGUgdHJhbnNtaXQgd2Fzbid0IGRlZmVycmVkLiAqLworI2RlZmluZSBFTlRTUl9DT0wgMHgwNAkvKiBUaGUgdHJhbnNtaXQgY29sbGlkZWQgYXQgbGVhc3Qgb25jZS4gKi8KKyNkZWZpbmUgRU5UU1JfQUJUIDB4MDggIC8qIFRoZSB0cmFuc21pdCBjb2xsaWRlZCAxNiB0aW1lcywgYW5kIHdhcyBkZWZlcnJlZC4gKi8KKyNkZWZpbmUgRU5UU1JfQ1JTIDB4MTAJLyogVGhlIGNhcnJpZXIgc2Vuc2Ugd2FzIGxvc3QuICovCisjZGVmaW5lIEVOVFNSX0ZVICAweDIwICAvKiBBICJGSUZPIHVuZGVycnVuIiBvY2N1cnJlZCBkdXJpbmcgdHJhbnNtaXQuICovCisjZGVmaW5lIEVOVFNSX0NESCAweDQwCS8qIFRoZSBjb2xsaXNpb24gZGV0ZWN0ICJoZWFydGJlYXQiIHNpZ25hbCB3YXMgbG9zdC4gKi8KKyNkZWZpbmUgRU5UU1JfT1dDIDB4ODAgIC8qIFRoZXJlIHdhcyBhbiBvdXQtb2Ytd2luZG93IGNvbGxpc2lvbi4gKi8KKworI2RlZmluZSBOSUNfUkVDRUlWRV9NT05JVE9SX01PREUgMHgyMAorCisjZW5kaWYgLyogXzgzOTBfaCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9NYWtlZmlsZSBiL2RyaXZlcnMvTWFrZWZpbGUKaW5kZXggOGI3M2Q2Ni4uY2MxM2E3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL01ha2VmaWxlCkBAIC0zMiw5ICszMiwxMCBAQAogCSAgY3M4OTAwLm8gY3Q2OTAwMC5vIGRhdGFmbGFzaC5vIGRjMjExNHgubyBkbTkwMDB4Lm8gXAogCSAgZTEwMDAubyBlZXBybzEwMC5vIFwKIAkgIGk4MDQyLm8gaTgyMzY1Lm8gaW5jYS1pcF9zdy5vIGtleWJvYXJkLm8gXAotCSAgbGFuOTFjOTYubyBuYXRzZW1pLm8gbmV0YXJtX2V0aC5vIG5ldGNvbnNvbGUubyBcCisJICBsYW45MWM5Ni5vIFwKKwkgIG5hdHNlbWkubyBuZTIwMDAubyBuZXRhcm1fZXRoLm8gbmV0Y29uc29sZS5vIFwKIAkgIG5zMTY1NTAubyBuczgzODJ4Lm8gbnM4NzMwOC5vIG9tYXAxNTEwX2kyYy5vIFwKLQkgIHBjaS5vIHBjaV9hdXRvLm8gcGNpX2luZGlyZWN0Lm8gXAorCSAgb21hcDI0eHhfaTJjLm8gcGNpLm8gcGNpX2F1dG8ubyBwY2lfaW5kaXJlY3QubyBcCiAJICBwY25ldC5vIHBsYjI4MDBfZXRoLm8gXAogCSAgcHMyc2VyLm8gcHMybXVsdC5vIHBjX2tleWIubyBcCiAJICBydGw4MDE5Lm8gcnRsODEzOS5vIHJ0bDgxNjkubyBcCmRpZmYgLS1naXQgYS9kcml2ZXJzL25lMjAwMC5jIGIvZHJpdmVycy9uZTIwMDAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iN2VkODc2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZTIwMDAuYwpAQCAtMCwwICsxLDk2MyBAQAorLyoKK1BvcnRlZCB0byBVLUJvb3QgIGJ5IENocmlzdGlhbiBQZWxsZWdyaW4gPGNocmlAYXNjZW5zaXQuY29tPgorCitCYXNlZCBvbiBzb3VyY2VzIGZyb20gdGhlIExpbnV4IGtlcm5lbCAocGNuZXRfY3MuYywgODM5MC5oKSBhbmQKK2VDT1MoaWZfZHA4MzkwMmEuYywgaWZfZHA4MzkwMmEuaCkuIEJvdGggb2YgdGhlc2UgMiB3b25kZXJmdWwgd29ybGQKK2FyZSBHUEwsIHNvIHRoaXMgaXMsIG9mIGNvdXJzZSwgR1BMLgorCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK2Rldi9pZl9kcDgzOTAyYS5jCisKK0V0aGVybmV0IGRldmljZSBkcml2ZXIgZm9yIE5TIERQODM5MDJhIGV0aGVybmV0IGNvbnRyb2xsZXIKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMjIyNFQ09TR1BMQ09QWVJJR0hUQkVHSU4jIyMjCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUaGlzIGZpbGUgaXMgcGFydCBvZiBlQ29zLCB0aGUgRW1iZWRkZWQgQ29uZmlndXJhYmxlIE9wZXJhdGluZyBTeXN0ZW0uCitDb3B5cmlnaHQgKEMpIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIgUmVkIEhhdCwgSW5jLgorCitlQ29zIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKK3RoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK2VDb3MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZCitXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZword2l0aCBlQ29zOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCis1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQS4KKworQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUgdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3MKK29yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlIHRoaXMgZmlsZSBhbmQgbGluayBpdAord2l0aCBvdGhlciB3b3JrcyB0byBwcm9kdWNlIGEgd29yayBiYXNlZCBvbiB0aGlzIGZpbGUsIHRoaXMgZmlsZSBkb2VzIG5vdAorYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgd29yayB0byBiZSBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UuIEhvd2V2ZXIgdGhlIHNvdXJjZSBjb2RlIGZvciB0aGlzIGZpbGUgbXVzdCBzdGlsbCBiZSBtYWRlIGF2YWlsYWJsZQoraW4gYWNjb3JkYW5jZSB3aXRoIHNlY3Rpb24gKDMpIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKworVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgYSB3b3JrIGJhc2VkIG9uCit0aGlzIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisKK0FsdGVybmF0aXZlIGxpY2Vuc2VzIGZvciBlQ29zIG1heSBiZSBhcnJhbmdlZCBieSBjb250YWN0aW5nIFJlZCBIYXQsIEluYy4KK2F0IGh0dHA6Ly9zb3VyY2VzLnJlZGhhdC5jb20vZWNvcy9lY29zLWxpY2Vuc2UvCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIyMjRUNPU0dQTENPUFlSSUdIVEVORCMjIyMKKyMjIyNCU0RDT1BZUklHSFRCRUdJTiMjIyMKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitQb3J0aW9ucyBvZiB0aGlzIHNvZnR3YXJlIG1heSBoYXZlIGJlZW4gZGVyaXZlZCBmcm9tIE9wZW5CU0Qgb3Igb3RoZXIgc291cmNlcywKK2FuZCBhcmUgY292ZXJlZCBieSB0aGUgYXBwcm9wcmlhdGUgY29weXJpZ2h0IGRpc2NsYWltZXJzIGluY2x1ZGVkIGhlcmVpbi4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIyMjQlNEQ09QWVJJR0hURU5EIyMjIworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMjIyMjREVTQ1JJUFRJT05CRUdJTiMjIyMKKworQXV0aG9yKHMpOiAgICBndGhvbWFzCitDb250cmlidXRvcnM6IGd0aG9tYXMsIGpza292LCByc2FuZGlmbworRGF0ZToJICAgICAgMjAwMS0wNi0xMworUHVycG9zZToKK0Rlc2NyaXB0aW9uOgorCitGSVhNRToJICAgICAgV2lsbCBmYWlsIGlmIHBpbmdlZCB3aXRoIGxhcmdlIHBhY2tldHMgKDE1MjAgYnl0ZXMpCitBZGQgcHJvbWlzYyBjb25maWcKK0FkZCBTTk1QCisKKyMjIyNERVNDUklQVElPTkVORCMjIyMKKworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8Y29tbWFuZC5oPgorI2luY2x1ZGUgPG5ldC5oPgorI2luY2x1ZGUgPG1hbGxvYy5oPgorCisjaWZkZWYgQ09ORklHX0RSSVZFUl9ORTIwMDAKKworLyogd29yIGFyb3VuZCB1ZGVsYXkgcmVzZXR0aW5nIE9DUiAqLworc3RhdGljIHZvaWQgbXlfdWRlbGF5KGxvbmcgdXMpIHsKKwlsb25nIHRtbzsKKworCXRtbyA9IGdldF90aW1lciAoMCkgKyB1cyAqIENGR19IWiAvIDEwMDAwMDA7IC8qIHdpbGwgdGhpcyBiZSBtdWNoIGdyZWF0ZXIgdGhhbiAwID8gKi8KKwl3aGlsZSAoZ2V0X3RpbWVyICgwKSA8IHRtbyk7Cit9CisKKyNkZWZpbmUgbWRlbGF5KG4pICAgICAgIG15X3VkZWxheSgobikqMTAwMCkKKworLyogZm9yd2FyZCBkZWZpbml0aW9uIG9mIGZ1bmN0aW9uIHVzZWQgZm9yIHRoZSB1Ym9vdCBpbnRlcmZhY2UgKi8KK3ZvaWQgdWJvb3RfcHVzaF9wYWNrZXRfbGVuKGludCBsZW4pOwordm9pZCB1Ym9vdF9wdXNoX3R4X2RvbmUoaW50IGtleSwgaW50IHZhbCk7CisKKy8qIHRpbWVvdXQgZm9yIHR4L3J4IGluIHMgKi8KKyNkZWZpbmUgVE9VVCA1CisKKyNkZWZpbmUgRVRIRVJfQUREUl9MRU4gNgorCisvKgorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgRGVidWdnaW5nIGRldGFpbHMKKworICBTZXQgdG8gcGVybXMgb2Y6CisgIDAgZGlzYWJsZXMgYWxsIGRlYnVnIG91dHB1dAorICAxIGZvciBwcm9jZXNzIGRlYnVnIG91dHB1dAorICAyIGZvciBhZGRlZCBkYXRhIElPIG91dHB1dDogZ2V0X3JlZywgcHV0X3JlZworICA0IGZvciBwYWNrZXQgYWxsb2NhdGlvbi9mcmVlIG91dHB1dAorICA4IGZvciBvbmx5IHN0YXJ0dXAgc3RhdHVzLCBzbyB3ZSBjYW4gdGVsbCB3ZSdyZSBpbnN0YWxsZWQgT0sKKyovCisvKiNkZWZpbmUgREVCVUcgMHhmKi8KKyNkZWZpbmUgREVCVUcgMAorCisjaWYgREVCVUcgJiAxCisjZGVmaW5lIERFQlVHX0ZVTkNUSU9OKCkgZG8geyBwcmludGYoIiVzXG4iLCBfX0ZVTkNUSU9OX18pOyB9IHdoaWxlICgwKQorI2RlZmluZSBERUJVR19MSU5FKCkgZG8geyBwcmludGYoIiVkXG4iLCBfX0xJTkVfXyk7IH0gd2hpbGUgKDApCisjZWxzZQorI2RlZmluZSBERUJVR19GVU5DVElPTigpIGRvIHt9IHdoaWxlKDApCisjZGVmaW5lIERFQlVHX0xJTkUoKSBkbyB7fSB3aGlsZSgwKQorI2VuZGlmCisKKyNpbmNsdWRlICJuZTIwMDAuaCIKKworI2lmIERFQlVHICYgMQorI2RlZmluZSBQUklOVEsoYXJncy4uLikgcHJpbnRmKGFyZ3MpCisjZWxzZQorI2RlZmluZSBQUklOVEsoYXJncy4uLikKKyNlbmRpZgorCitzdGF0aWMgZHA4MzkwMmFfcHJpdl9kYXRhX3QgbmljOyAvKiBqdXN0IG9uZSBpbnN0YW5jZSBvZiB0aGUgY2FyZCBzdXBwb3J0ZWQgKi8KKworc3RhdGljIGJvb2wKK2RwODM5MDJhX2luaXQodm9pZCkKK3sKKwlkcDgzOTAyYV9wcml2X2RhdGFfdCAqZHAgPSAmbmljOworCWN5Z191aW50OCogYmFzZTsKKwlpbnQgaTsKKworCURFQlVHX0ZVTkNUSU9OKCk7CisKKwliYXNlID0gZHAtPmJhc2U7CisJaWYgKCFiYXNlKSByZXR1cm4gZmFsc2U7ICAvKiBObyBkZXZpY2UgZm91bmQgKi8KKworCURFQlVHX0xJTkUoKTsKKworCS8qIFByZXBhcmUgRVNBICovCisJRFBfT1VUKGJhc2UsIERQX0NSLCBEUF9DUl9OT0RNQSB8IERQX0NSX1BBR0UxKTsgIC8qIFNlbGVjdCBwYWdlIDEgKi8KKwkvKiBVc2UgdGhlIGFkZHJlc3MgZnJvbSB0aGUgc2VyaWFsIEVFUFJPTSAqLworCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspCisJCURQX0lOKGJhc2UsIERQX1AxX1BBUjAraSwgZHAtPmVzYVtpXSk7CisJRFBfT1VUKGJhc2UsIERQX0NSLCBEUF9DUl9OT0RNQSB8IERQX0NSX1BBR0UwKTsgIC8qIFNlbGVjdCBwYWdlIDAgKi8KKworCXByaW50ZigiTkUyMDAwIC0gJXMgRVNBOiAlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeFxuIiwKKwkgICAgICAgImVlcHJvbSIsCisJICAgICAgIGRwLT5lc2FbMF0sCisJICAgICAgIGRwLT5lc2FbMV0sCisJICAgICAgIGRwLT5lc2FbMl0sCisJICAgICAgIGRwLT5lc2FbM10sCisJICAgICAgIGRwLT5lc2FbNF0sCisJICAgICAgIGRwLT5lc2FbNV0gKTsKKworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgdm9pZAorZHA4MzkwMmFfc3RvcCh2b2lkKQoreworCWRwODM5MDJhX3ByaXZfZGF0YV90ICpkcCA9ICZuaWM7CisJY3lnX3VpbnQ4ICpiYXNlID0gZHAtPmJhc2U7CisKKwlERUJVR19GVU5DVElPTigpOworCisJRFBfT1VUKGJhc2UsIERQX0NSLCBEUF9DUl9QQUdFMCB8IERQX0NSX05PRE1BIHwgRFBfQ1JfU1RPUCk7ICAvKiBCcnV0YWwgKi8KKwlEUF9PVVQoYmFzZSwgRFBfSVNSLCAweEZGKTsJCS8qIENsZWFyIGFueSBwZW5kaW5nIGludGVycnVwdHMgKi8KKwlEUF9PVVQoYmFzZSwgRFBfSU1SLCAweDAwKTsJCS8qIERpc2FibGUgYWxsIGludGVycnVwdHMgKi8KKworCWRwLT5ydW5uaW5nID0gZmFsc2U7Cit9CisKKy8qCisgIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHRvICJzdGFydCB1cCIgdGhlIGludGVyZmFjZS4gIEl0IG1heSBiZSBjYWxsZWQKKyAgbXVsdGlwbGUgdGltZXMsIGV2ZW4gd2hlbiB0aGUgaGFyZHdhcmUgaXMgYWxyZWFkeSBydW5uaW5nLiAgSXQgd2lsbCBiZQorICBjYWxsZWQgd2hlbmV2ZXIgc29tZXRoaW5nICJoYXJkd2FyZSBvcmllbnRlZCIgY2hhbmdlcyBhbmQgc2hvdWxkIGxlYXZlCisgIHRoZSBoYXJkd2FyZSByZWFkeSB0byBzZW5kL3JlY2VpdmUgcGFja2V0cy4KKyovCitzdGF0aWMgdm9pZAorZHA4MzkwMmFfc3RhcnQodW5zaWduZWQgY2hhciAqIGVuYWRkcikKK3sKKwlkcDgzOTAyYV9wcml2X2RhdGFfdCAqZHAgPSAmbmljOworCWN5Z191aW50OCAqYmFzZSA9IGRwLT5iYXNlOworCWludCBpOworCisJREVCVUdfRlVOQ1RJT04oKTsKKworCURQX09VVChiYXNlLCBEUF9DUiwgRFBfQ1JfUEFHRTAgfCBEUF9DUl9OT0RNQSB8IERQX0NSX1NUT1ApOyAvKiBCcnV0YWwgKi8KKwlEUF9PVVQoYmFzZSwgRFBfRENSLCBEUF9EQ1JfSU5JVCk7CisJRFBfT1VUKGJhc2UsIERQX1JCQ0gsIDApOwkJLyogUmVtb3RlIGJ5dGUgY291bnQgKi8KKwlEUF9PVVQoYmFzZSwgRFBfUkJDTCwgMCk7CisJRFBfT1VUKGJhc2UsIERQX1JDUiwgRFBfUkNSX01PTik7CS8qIEFjY2VwdCBubyBwYWNrZXRzICovCisJRFBfT1VUKGJhc2UsIERQX1RDUiwgRFBfVENSX0xPQ0FMKTsJLyogVHJhbnNtaXR0ZXIgW3ZpcnR1YWxseV0gb2ZmICovCisJRFBfT1VUKGJhc2UsIERQX1RQU1IsIGRwLT50eF9idWYxKTsJLyogVHJhbnNtaXR0ZXIgc3RhcnQgcGFnZSAqLworCWRwLT50eDEgPSBkcC0+dHgyID0gMDsKKwlkcC0+dHhfbmV4dCA9IGRwLT50eF9idWYxOworCWRwLT50eF9zdGFydGVkID0gZmFsc2U7CisJRFBfT1VUKGJhc2UsIERQX1BTVEFSVCwgZHAtPnJ4X2J1Zl9zdGFydCk7IC8qIFJlY2VpdmUgcmluZyBzdGFydCBwYWdlICovCisJRFBfT1VUKGJhc2UsIERQX0JORFJZLCBkcC0+cnhfYnVmX2VuZC0xKTsgLyogUmVjZWl2ZSByaW5nIGJvdW5kYXJ5ICovCisJRFBfT1VUKGJhc2UsIERQX1BTVE9QLCBkcC0+cnhfYnVmX2VuZCk7CS8qIFJlY2VpdmUgcmluZyBlbmQgcGFnZSAqLworCWRwLT5yeF9uZXh0ID0gZHAtPnJ4X2J1Zl9zdGFydC0xOworCURQX09VVChiYXNlLCBEUF9JU1IsIDB4RkYpOwkJLyogQ2xlYXIgYW55IHBlbmRpbmcgaW50ZXJydXB0cyAqLworCURQX09VVChiYXNlLCBEUF9JTVIsIERQX0lNUl9BbGwpOwkvKiBFbmFibGUgYWxsIGludGVycnVwdHMgKi8KKwlEUF9PVVQoYmFzZSwgRFBfQ1IsIERQX0NSX05PRE1BIHwgRFBfQ1JfUEFHRTEgfCBEUF9DUl9TVE9QKTsgIC8qIFNlbGVjdCBwYWdlIDEgKi8KKwlEUF9PVVQoYmFzZSwgRFBfUDFfQ1VSUCwgZHAtPnJ4X2J1Zl9zdGFydCk7ICAgLyogQ3VycmVudCBwYWdlIC0gbmV4dCBmcmVlIHBhZ2UgZm9yIFJ4ICovCisJZm9yIChpID0gMDsgIGkgPCBFVEhFUl9BRERSX0xFTjsgIGkrKykgeworCQlEUF9PVVQoYmFzZSwgRFBfUDFfUEFSMCtpLCBlbmFkZHJbaV0pOworCX0KKwkvKiBFbmFibGUgYW5kIHN0YXJ0IGRldmljZSAqLworCURQX09VVChiYXNlLCBEUF9DUiwgRFBfQ1JfUEFHRTAgfCBEUF9DUl9OT0RNQSB8IERQX0NSX1NUQVJUKTsKKwlEUF9PVVQoYmFzZSwgRFBfVENSLCBEUF9UQ1JfTk9STUFMKTsgLyogTm9ybWFsIHRyYW5zbWl0IG9wZXJhdGlvbnMgKi8KKwlEUF9PVVQoYmFzZSwgRFBfUkNSLCBEUF9SQ1JfQUIpOyAgLyogQWNjZXB0IGJyb2FkY2FzdCwgbm8gZXJyb3JzLCBubyBtdWx0aWNhc3QgKi8KKwlkcC0+cnVubmluZyA9IHRydWU7Cit9CisKKy8qCisgIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgdG8gc3RhcnQgdGhlIHRyYW5zbWl0dGVyLiAgSXQgaXMgc3BsaXQgb3V0IGZyb20gdGhlCisgIGRhdGEgaGFuZGxpbmcgcm91dGluZSBzbyBpdCBtYXkgYmUgY2FsbGVkIGVpdGhlciB3aGVuIGRhdGEgYmVjb21lcyBmaXJzdAorICBhdmFpbGFibGUgb3Igd2hlbiBhbiBUeCBpbnRlcnJ1cHQgb2NjdXJzCisqLworCitzdGF0aWMgdm9pZAorZHA4MzkwMmFfc3RhcnRfeG1pdChpbnQgc3RhcnRfcGFnZSwgaW50IGxlbikKK3sKKwlkcDgzOTAyYV9wcml2X2RhdGFfdCAqZHAgPSAoZHA4MzkwMmFfcHJpdl9kYXRhX3QgKikgJm5pYzsKKwljeWdfdWludDggKmJhc2UgPSBkcC0+YmFzZTsKKworCURFQlVHX0ZVTkNUSU9OKCk7CisKKyNpZiBERUJVRyAmIDEKKwlwcmludGYoIlR4IHBrdCAlZCBsZW4gJWRcbiIsIHN0YXJ0X3BhZ2UsIGxlbik7CisJaWYgKGRwLT50eF9zdGFydGVkKQorCQlwcmludGYoIlRYIGFscmVhZHkgc3RhcnRlZD8hP1xuIik7CisjZW5kaWYKKworCURQX09VVChiYXNlLCBEUF9JU1IsIChEUF9JU1JfVHhQIHwgRFBfSVNSX1R4RSkpOworCURQX09VVChiYXNlLCBEUF9DUiwgRFBfQ1JfUEFHRTAgfCBEUF9DUl9OT0RNQSB8IERQX0NSX1NUQVJUKTsKKwlEUF9PVVQoYmFzZSwgRFBfVEJDTCwgbGVuICYgMHhGRik7CisJRFBfT1VUKGJhc2UsIERQX1RCQ0gsIGxlbiA+PiA4KTsKKwlEUF9PVVQoYmFzZSwgRFBfVFBTUiwgc3RhcnRfcGFnZSk7CisJRFBfT1VUKGJhc2UsIERQX0NSLCBEUF9DUl9OT0RNQSB8IERQX0NSX1RYUEtUIHwgRFBfQ1JfU1RBUlQpOworCisJZHAtPnR4X3N0YXJ0ZWQgPSB0cnVlOworfQorCisvKgorICBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIHRvIHNlbmQgZGF0YSB0byB0aGUgaGFyZHdhcmUuICBJdCBpcyBrbm93biBhLXByaW9yaQorICB0aGF0IHRoZXJlIGlzIGZyZWUgYnVmZmVyIHNwYWNlIChkcC0+dHhfbmV4dCkuCisqLworc3RhdGljIHZvaWQKK2RwODM5MDJhX3NlbmQodW5zaWduZWQgY2hhciAqZGF0YSwgaW50IHRvdGFsX2xlbiwgdW5zaWduZWQgbG9uZyBrZXkpCit7CisJc3RydWN0IGRwODM5MDJhX3ByaXZfZGF0YSAqZHAgPSAoc3RydWN0IGRwODM5MDJhX3ByaXZfZGF0YSAqKSAmbmljOworCWN5Z191aW50OCAqYmFzZSA9IGRwLT5iYXNlOworCWludCBsZW4sIHN0YXJ0X3BhZ2UsIHBrdF9sZW4sIGksIGlzcjsKKyNpZiBERUJVRyAmIDQKKwlpbnQgZHg7CisjZW5kaWYKKworCURFQlVHX0ZVTkNUSU9OKCk7CisKKwlsZW4gPSBwa3RfbGVuID0gdG90YWxfbGVuOworCWlmIChwa3RfbGVuIDwgSUVFRV84MDIzX01JTl9GUkFNRSkgcGt0X2xlbiA9IElFRUVfODAyM19NSU5fRlJBTUU7CisKKwlzdGFydF9wYWdlID0gZHAtPnR4X25leHQ7CisJaWYgKGRwLT50eF9uZXh0ID09IGRwLT50eF9idWYxKSB7CisJCWRwLT50eDEgPSBzdGFydF9wYWdlOworCQlkcC0+dHgxX2xlbiA9IHBrdF9sZW47CisJCWRwLT50eDFfa2V5ID0ga2V5OworCQlkcC0+dHhfbmV4dCA9IGRwLT50eF9idWYyOworCX0gZWxzZSB7CisJCWRwLT50eDIgPSBzdGFydF9wYWdlOworCQlkcC0+dHgyX2xlbiA9IHBrdF9sZW47CisJCWRwLT50eDJfa2V5ID0ga2V5OworCQlkcC0+dHhfbmV4dCA9IGRwLT50eF9idWYxOworCX0KKworI2lmIERFQlVHICYgNQorCXByaW50ZigiVFggcHJlcCBwYWdlICVkIGxlbiAlZFxuIiwgc3RhcnRfcGFnZSwgcGt0X2xlbik7CisjZW5kaWYKKworCURQX09VVChiYXNlLCBEUF9JU1IsIERQX0lTUl9SREMpOyAgLyogQ2xlYXIgZW5kIG9mIERNQSAqLworCXsKKwkJLyogRHVtbXkgcmVhZC4gVGhlIG1hbnVhbCBzZXogc29tZXRoaW5nIHNsaWdodGx5IGRpZmZlcmVudCwgKi8KKwkJLyogYnV0IHRoZSBjb2RlIGlzIGV4dGVuZGVkIGEgYml0IHRvIGRvIHdoYXQgSGl0YWNoaSdzIG1vbml0b3IgKi8KKwkJLyogZG9lcyAoaS5lLiwgYWxzbyByZWFkIGRhdGEpLiAqLworCisJCWN5Z191aW50MTYgdG1wOworCQlpbnQgbGVuID0gMTsKKworCQlEUF9PVVQoYmFzZSwgRFBfUlNBTCwgMHgxMDAtbGVuKTsKKwkJRFBfT1VUKGJhc2UsIERQX1JTQUgsIChzdGFydF9wYWdlLTEpICYgMHhmZik7CisJCURQX09VVChiYXNlLCBEUF9SQkNMLCBsZW4pOworCQlEUF9PVVQoYmFzZSwgRFBfUkJDSCwgMCk7CisJCURQX09VVChiYXNlLCBEUF9DUiwgRFBfQ1JfUEFHRTAgfCBEUF9DUl9SRE1BIHwgRFBfQ1JfU1RBUlQpOworCQlEUF9JTl9EQVRBKGRwLT5kYXRhLCB0bXApOworCX0KKworI2lmZGVmIENZR0hXUl9OU19EUDgzOTAyQV9QTEZfQlJPS0VOX1RYX0RNQQorCS8qIFN0YWxsIGZvciBhIGJpdCBiZWZvcmUgY29udGludWluZyB0byB3b3JrIGFyb3VuZCByYW5kb20gZGF0YSAqLworCS8qIGNvcnJ1cHRpb24gcHJvYmxlbXMgb24gc29tZSBwbGF0Zm9ybXMuICovCisJQ1lHQUNDX0NBTExfSUZfREVMQVlfVVMoMSk7CisjZW5kaWYKKworCS8qIFNlbmQgZGF0YSB0byBkZXZpY2UgYnVmZmVyKHMpICovCisJRFBfT1VUKGJhc2UsIERQX1JTQUwsIDApOworCURQX09VVChiYXNlLCBEUF9SU0FILCBzdGFydF9wYWdlKTsKKwlEUF9PVVQoYmFzZSwgRFBfUkJDTCwgcGt0X2xlbiAmIDB4RkYpOworCURQX09VVChiYXNlLCBEUF9SQkNILCBwa3RfbGVuID4+IDgpOworCURQX09VVChiYXNlLCBEUF9DUiwgRFBfQ1JfV0RNQSB8IERQX0NSX1NUQVJUKTsKKworCS8qIFB1dCBkYXRhIGludG8gYnVmZmVyICovCisjaWYgREVCVUcgJiA0CisJcHJpbnRmKCIgc2cgYnVmICUwOGx4IGxlbiAlMDh4XG4gIiwgKHVuc2lnbmVkIGxvbmcpIGRhdGEsIGxlbik7CisJZHggPSAwOworI2VuZGlmCisJd2hpbGUgKGxlbiA+IDApIHsKKyNpZiBERUJVRyAmIDQKKwkJcHJpbnRmKCIgJTAyeCIsICpkYXRhKTsKKwkJaWYgKDAgPT0gKCsrZHggJSAxNikpIHByaW50ZigiXG4gIik7CisjZW5kaWYKKwkJRFBfT1VUX0RBVEEoZHAtPmRhdGEsICpkYXRhKyspOworCQlsZW4tLTsKKwl9CisjaWYgREVCVUcgJiA0CisJcHJpbnRmKCJcbiIpOworI2VuZGlmCisJaWYgKHRvdGFsX2xlbiA8IHBrdF9sZW4pIHsKKyNpZiBERUJVRyAmIDQKKwkJcHJpbnRmKCIgICsgJWQgYnl0ZXMgb2YgcGFkZGluZ1xuIiwgcGt0X2xlbiAtIHRvdGFsX2xlbik7CisjZW5kaWYKKwkJLyogUGFkZGluZyB0byA4MDIuMyBsZW5ndGggd2FzIHJlcXVpcmVkICovCisJCWZvciAoaSA9IHRvdGFsX2xlbjsgIGkgPCBwa3RfbGVuOykgeworCQkJaSsrOworCQkJRFBfT1VUX0RBVEEoZHAtPmRhdGEsIDApOworCQl9CisJfQorCisjaWZkZWYgQ1lHSFdSX05TX0RQODM5MDJBX1BMRl9CUk9LRU5fVFhfRE1BCisJLyogQWZ0ZXIgbGFzdCBkYXRhIHdyaXRlLCBkZWxheSBmb3IgYSBiaXQgYmVmb3JlIGFjY2Vzc2luZyB0aGUgKi8KKwkvKiBkZXZpY2UgYWdhaW4sIG9yIHdlIG1heSBnZXQgcmFuZG9tIGRhdGEgY29ycnVwdGlvbiBpbiB0aGUgbGFzdCAqLworCS8qIGRhdHVtIChvbiBzb21lIHBsYXRmb3JtcykuICovCisJQ1lHQUNDX0NBTExfSUZfREVMQVlfVVMoMSk7CisjZW5kaWYKKworCS8qIFdhaXQgZm9yIERNQSB0byBjb21wbGV0ZSAqLworCWRvIHsKKwkJRFBfSU4oYmFzZSwgRFBfSVNSLCBpc3IpOworCX0gd2hpbGUgKChpc3IgJiBEUF9JU1JfUkRDKSA9PSAwKTsKKwkvKiBUaGVuIGRpc2FibGUgRE1BICovCisJRFBfT1VUKGJhc2UsIERQX0NSLCBEUF9DUl9QQUdFMCB8IERQX0NSX05PRE1BIHwgRFBfQ1JfU1RBUlQpOworCisJLyogU3RhcnQgdHJhbnNtaXQgaWYgbm90IGFscmVhZHkgZ29pbmcgKi8KKwlpZiAoIWRwLT50eF9zdGFydGVkKSB7CisJCWlmIChzdGFydF9wYWdlID09IGRwLT50eDEpIHsKKwkJCWRwLT50eF9pbnQgPSAxOyAgLyogRXhwZWN0aW5nIGludGVycnVwdCBmcm9tIEJVRjEgKi8KKwkJfSBlbHNlIHsKKwkJCWRwLT50eF9pbnQgPSAyOyAgLyogRXhwZWN0aW5nIGludGVycnVwdCBmcm9tIEJVRjIgKi8KKwkJfQorCQlkcDgzOTAyYV9zdGFydF94bWl0KHN0YXJ0X3BhZ2UsIHBrdF9sZW4pOworCX0KK30KKworLyoKKyAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBhIHBhY2tldCBoYXMgYmVlbiByZWNlaXZlZC4gIEl0J3Mgam9iIGlzCisgIHRvIHByZXBhcmUgdG8gdW5sb2FkIHRoZSBwYWNrZXQgZnJvbSB0aGUgaGFyZHdhcmUuICBPbmNlIHRoZSBsZW5ndGggb2YKKyAgdGhlIHBhY2tldCBpcyBrbm93biwgdGhlIHVwcGVyIGxheWVyIG9mIHRoZSBkcml2ZXIgY2FuIGJlIHRvbGQuICBXaGVuCisgIHRoZSB1cHBlciBsYXllciBpcyByZWFkeSB0byB1bmxvYWQgdGhlIHBhY2tldCwgdGhlIGludGVybmFsIGZ1bmN0aW9uCisgICdkcDgzOTAyYV9yZWN2JyB3aWxsIGJlIGNhbGxlZCB0byBhY3R1YWxseSBmZXRjaCBpdCBmcm9tIHRoZSBoYXJkd2FyZS4KKyovCitzdGF0aWMgdm9pZAorZHA4MzkwMmFfUnhFdmVudCh2b2lkKQoreworCXN0cnVjdCBkcDgzOTAyYV9wcml2X2RhdGEgKmRwID0gKHN0cnVjdCBkcDgzOTAyYV9wcml2X2RhdGEgKikgJm5pYzsKKwljeWdfdWludDggKmJhc2UgPSBkcC0+YmFzZTsKKwl1bnNpZ25lZCBjaGFyIHJzcjsKKwl1bnNpZ25lZCBjaGFyIHJjdl9oZHJbNF07CisJaW50IGksIGxlbiwgcGt0LCBjdXI7CisKKwlERUJVR19GVU5DVElPTigpOworCisJRFBfSU4oYmFzZSwgRFBfUlNSLCByc3IpOworCXdoaWxlICh0cnVlKSB7CisJCS8qIFJlYWQgaW5jb21pbmcgcGFja2V0IGhlYWRlciAqLworCQlEUF9PVVQoYmFzZSwgRFBfQ1IsIERQX0NSX1BBR0UxIHwgRFBfQ1JfTk9ETUEgfCBEUF9DUl9TVEFSVCk7CisJCURQX0lOKGJhc2UsIERQX1AxX0NVUlAsIGN1cik7CisJCURQX09VVChiYXNlLCBEUF9QMV9DUiwgRFBfQ1JfUEFHRTAgfCBEUF9DUl9OT0RNQSB8IERQX0NSX1NUQVJUKTsKKwkJRFBfSU4oYmFzZSwgRFBfQk5EUlksIHBrdCk7CisKKwkJcGt0ICs9IDE7CisJCWlmIChwa3QgPT0gZHAtPnJ4X2J1Zl9lbmQpCisJCQlwa3QgPSBkcC0+cnhfYnVmX3N0YXJ0OworCisJCWlmIChwa3QgPT0gY3VyKSB7CisJCQlicmVhazsKKwkJfQorCQlEUF9PVVQoYmFzZSwgRFBfUkJDTCwgc2l6ZW9mKHJjdl9oZHIpKTsKKwkJRFBfT1VUKGJhc2UsIERQX1JCQ0gsIDApOworCQlEUF9PVVQoYmFzZSwgRFBfUlNBTCwgMCk7CisJCURQX09VVChiYXNlLCBEUF9SU0FILCBwa3QpOworCQlpZiAoZHAtPnJ4X25leHQgPT0gcGt0KSB7CisJCQlpZiAoY3VyID09IGRwLT5yeF9idWZfc3RhcnQpCisJCQkJRFBfT1VUKGJhc2UsIERQX0JORFJZLCBkcC0+cnhfYnVmX2VuZC0xKTsKKwkJCWVsc2UKKwkJCQlEUF9PVVQoYmFzZSwgRFBfQk5EUlksIGN1ci0xKTsgLyogVXBkYXRlIHBvaW50ZXIgKi8KKwkJCXJldHVybjsKKwkJfQorCQlkcC0+cnhfbmV4dCA9IHBrdDsKKwkJRFBfT1VUKGJhc2UsIERQX0lTUiwgRFBfSVNSX1JEQyk7IC8qIENsZWFyIGVuZCBvZiBETUEgKi8KKwkJRFBfT1VUKGJhc2UsIERQX0NSLCBEUF9DUl9SRE1BIHwgRFBfQ1JfU1RBUlQpOworI2lmZGVmIENZR0hXUl9OU19EUDgzOTAyQV9QTEZfQlJPS0VOX1JYX0RNQQorCQlDWUdBQ0NfQ0FMTF9JRl9ERUxBWV9VUygxMCk7CisjZW5kaWYKKworCQlmb3IgKGkgPSAwOyAgaSA8IHNpemVvZihyY3ZfaGRyKTspIHsKKwkJCURQX0lOX0RBVEEoZHAtPmRhdGEsIHJjdl9oZHJbaSsrXSk7CisJCX0KKworI2lmIERFQlVHICYgNQorCQlwcmludGYoInJ4IGhkciAlMDJ4ICUwMnggJTAyeCAlMDJ4XG4iLAorCQkgICAgICAgcmN2X2hkclswXSwgcmN2X2hkclsxXSwgcmN2X2hkclsyXSwgcmN2X2hkclszXSk7CisjZW5kaWYKKwkJbGVuID0gKChyY3ZfaGRyWzNdIDw8IDgpIHwgcmN2X2hkclsyXSkgLSBzaXplb2YocmN2X2hkcik7CisJCXVib290X3B1c2hfcGFja2V0X2xlbihsZW4pOworCQlpZiAocmN2X2hkclsxXSA9PSBkcC0+cnhfYnVmX3N0YXJ0KQorCQkJRFBfT1VUKGJhc2UsIERQX0JORFJZLCBkcC0+cnhfYnVmX2VuZC0xKTsKKwkJZWxzZQorCQkJRFBfT1VUKGJhc2UsIERQX0JORFJZLCByY3ZfaGRyWzFdLTEpOyAvKiBVcGRhdGUgcG9pbnRlciAqLworCX0KK30KKworLyoKKyAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXMgYSByZXN1bHQgb2YgdGhlICJldGhfZHJ2X3JlY3YoKSIgY2FsbCBhYm92ZS4KKyAgSXQncyBqb2IgaXMgdG8gYWN0dWFsbHkgZmV0Y2ggZGF0YSBmb3IgYSBwYWNrZXQgZnJvbSB0aGUgaGFyZHdhcmUgb25jZQorICBtZW1vcnkgYnVmZmVycyBoYXZlIGJlZW4gYWxsb2NhdGVkIGZvciB0aGUgcGFja2V0LiAgTm90ZSB0aGF0IHRoZSBidWZmZXJzCisgIG1heSBjb21lIGluIHBpZWNlcywgdXNpbmcgYSBzY2F0dGVyLWdhdGhlciBsaXN0LiAgVGhpcyBhbGxvd3MgZm9yIG1vcmUKKyAgZWZmaWNpZW50IHByb2Nlc3NpbmcgaW4gdGhlIHVwcGVyIGxheWVycyBvZiB0aGUgc3RhY2suCisqLworc3RhdGljIHZvaWQKK2RwODM5MDJhX3JlY3YodW5zaWduZWQgY2hhciAqZGF0YSwgaW50IGxlbikKK3sKKwlzdHJ1Y3QgZHA4MzkwMmFfcHJpdl9kYXRhICpkcCA9IChzdHJ1Y3QgZHA4MzkwMmFfcHJpdl9kYXRhICopICZuaWM7CisJY3lnX3VpbnQ4ICpiYXNlID0gZHAtPmJhc2U7CisJaW50IGksIG1sZW47CisJY3lnX3VpbnQ4IHNhdmVkX2NoYXIgPSAwOworCWJvb2wgc2F2ZWQ7CisjaWYgREVCVUcgJiA0CisJaW50IGR4OworI2VuZGlmCisKKwlERUJVR19GVU5DVElPTigpOworCisjaWYgREVCVUcgJiA1CisJcHJpbnRmKCJSeCBwYWNrZXQgJWQgbGVuZ3RoICVkXG4iLCBkcC0+cnhfbmV4dCwgbGVuKTsKKyNlbmRpZgorCisJLyogUmVhZCBpbmNvbWluZyBwYWNrZXQgZGF0YSAqLworCURQX09VVChiYXNlLCBEUF9DUiwgRFBfQ1JfUEFHRTAgfCBEUF9DUl9OT0RNQSB8IERQX0NSX1NUQVJUKTsKKwlEUF9PVVQoYmFzZSwgRFBfUkJDTCwgbGVuICYgMHhGRik7CisJRFBfT1VUKGJhc2UsIERQX1JCQ0gsIGxlbiA+PiA4KTsKKwlEUF9PVVQoYmFzZSwgRFBfUlNBTCwgNCk7CQkvKiBQYXN0IGhlYWRlciAqLworCURQX09VVChiYXNlLCBEUF9SU0FILCBkcC0+cnhfbmV4dCk7CisJRFBfT1VUKGJhc2UsIERQX0lTUiwgRFBfSVNSX1JEQyk7IC8qIENsZWFyIGVuZCBvZiBETUEgKi8KKwlEUF9PVVQoYmFzZSwgRFBfQ1IsIERQX0NSX1JETUEgfCBEUF9DUl9TVEFSVCk7CisjaWZkZWYgQ1lHSFdSX05TX0RQODM5MDJBX1BMRl9CUk9LRU5fUlhfRE1BCisJQ1lHQUNDX0NBTExfSUZfREVMQVlfVVMoMTApOworI2VuZGlmCisKKwlzYXZlZCA9IGZhbHNlOworCWZvciAoaSA9IDA7ICBpIDwgMTsgIGkrKykgeworCQlpZiAoZGF0YSkgeworCQkJbWxlbiA9IGxlbjsKKyNpZiBERUJVRyAmIDQKKwkJCXByaW50ZigiIHNnIGJ1ZiAlMDhseCBsZW4gJTA4eCBcbiIsICh1bnNpZ25lZCBsb25nKSBkYXRhLCBtbGVuKTsKKwkJCWR4ID0gMDsKKyNlbmRpZgorCQkJd2hpbGUgKDAgPCBtbGVuKSB7CisJCQkJLyogU2F2ZWQgYnl0ZSBmcm9tIHByZXZpb3VzIGxvb3A/ICovCisJCQkJaWYgKHNhdmVkKSB7CisJCQkJCSpkYXRhKysgPSBzYXZlZF9jaGFyOworCQkJCQltbGVuLS07CisJCQkJCXNhdmVkID0gZmFsc2U7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKworCQkJCXsKKwkJCQkJY3lnX3VpbnQ4IHRtcDsKKwkJCQkJRFBfSU5fREFUQShkcC0+ZGF0YSwgdG1wKTsKKyNpZiBERUJVRyAmIDQKKwkJCQkJcHJpbnRmKCIgJTAyeCIsIHRtcCk7CisJCQkJCWlmICgwID09ICgrK2R4ICUgMTYpKSBwcmludGYoIlxuICIpOworI2VuZGlmCisJCQkJCSpkYXRhKysgPSB0bXA7OworCQkJCQltbGVuLS07CisJCQkJfQorCQkJfQorI2lmIERFQlVHICYgNAorCQkJcHJpbnRmKCJcbiIpOworI2VuZGlmCisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkCitkcDgzOTAyYV9UeEV2ZW50KHZvaWQpCit7CisJc3RydWN0IGRwODM5MDJhX3ByaXZfZGF0YSAqZHAgPSAoc3RydWN0IGRwODM5MDJhX3ByaXZfZGF0YSAqKSAmbmljOworCWN5Z191aW50OCAqYmFzZSA9IGRwLT5iYXNlOworCXVuc2lnbmVkIGNoYXIgdHNyOworCXVuc2lnbmVkIGxvbmcga2V5OworCisJREVCVUdfRlVOQ1RJT04oKTsKKworCURQX0lOKGJhc2UsIERQX1RTUiwgdHNyKTsKKwlpZiAoZHAtPnR4X2ludCA9PSAxKSB7CisJCWtleSA9IGRwLT50eDFfa2V5OworCQlkcC0+dHgxID0gMDsKKwl9IGVsc2UgeworCQlrZXkgPSBkcC0+dHgyX2tleTsKKwkJZHAtPnR4MiA9IDA7CisJfQorCS8qIFN0YXJ0IG5leHQgcGFja2V0IGlmIG9uZSBpcyByZWFkeSAqLworCWRwLT50eF9zdGFydGVkID0gZmFsc2U7CisJaWYgKGRwLT50eDEpIHsKKwkJZHA4MzkwMmFfc3RhcnRfeG1pdChkcC0+dHgxLCBkcC0+dHgxX2xlbik7CisJCWRwLT50eF9pbnQgPSAxOworCX0gZWxzZSBpZiAoZHAtPnR4MikgeworCQlkcDgzOTAyYV9zdGFydF94bWl0KGRwLT50eDIsIGRwLT50eDJfbGVuKTsKKwkJZHAtPnR4X2ludCA9IDI7CisJfSBlbHNlIHsKKwkJZHAtPnR4X2ludCA9IDA7CisJfQorCS8qIFRlbGwgaGlnaGVyIGxldmVsIHdlIHNlbnQgdGhpcyBwYWNrZXQgKi8KKwl1Ym9vdF9wdXNoX3R4X2RvbmUoa2V5LCAwKTsKK30KKworLyogUmVhZCB0aGUgdGFsbHkgY291bnRlcnMgdG8gY2xlYXIgdGhlbS4gIENhbGxlZCBpbiByZXNwb25zZSB0byBhIENOVCAqLworLyogaW50ZXJydXB0LiAqLworc3RhdGljIHZvaWQKK2RwODM5MDJhX0NsZWFyQ291bnRlcnModm9pZCkKK3sKKwlzdHJ1Y3QgZHA4MzkwMmFfcHJpdl9kYXRhICpkcCA9IChzdHJ1Y3QgZHA4MzkwMmFfcHJpdl9kYXRhICopICZuaWM7CisJY3lnX3VpbnQ4ICpiYXNlID0gZHAtPmJhc2U7CisJY3lnX3VpbnQ4IGNudDEsIGNudDIsIGNudDM7CisKKwlEUF9JTihiYXNlLCBEUF9GRVIsIGNudDEpOworCURQX0lOKGJhc2UsIERQX0NFUiwgY250Mik7CisJRFBfSU4oYmFzZSwgRFBfTUlTU0VELCBjbnQzKTsKKwlEUF9PVVQoYmFzZSwgRFBfSVNSLCBEUF9JU1JfQ05UKTsKK30KKworLyogRGVhbCB3aXRoIGFuIG92ZXJmbG93IGNvbmRpdGlvbi4gIFRoaXMgY29kZSBmb2xsb3dzIHRoZSBwcm9jZWR1cmUgc2V0ICovCisvKiBvdXQgaW4gc2VjdGlvbiA3LjAgb2YgdGhlIGRhdGFzaGVldC4gKi8KK3N0YXRpYyB2b2lkCitkcDgzOTAyYV9PdmVyZmxvdyh2b2lkKQoreworCXN0cnVjdCBkcDgzOTAyYV9wcml2X2RhdGEgKmRwID0gKHN0cnVjdCBkcDgzOTAyYV9wcml2X2RhdGEgKikmbmljOworCWN5Z191aW50OCAqYmFzZSA9IGRwLT5iYXNlOworCWN5Z191aW50OCBpc3I7CisKKwkvKiBJc3N1ZSBhIHN0b3AgY29tbWFuZCBhbmQgd2FpdCAxLjZtcyBmb3IgaXQgdG8gY29tcGxldGUuICovCisJRFBfT1VUKGJhc2UsIERQX0NSLCBEUF9DUl9TVE9QIHwgRFBfQ1JfTk9ETUEpOworCUNZR0FDQ19DQUxMX0lGX0RFTEFZX1VTKDE2MDApOworCisJLyogQ2xlYXIgdGhlIHJlbW90ZSBieXRlIGNvdW50ZXIgcmVnaXN0ZXJzLiAqLworCURQX09VVChiYXNlLCBEUF9SQkNMLCAwKTsKKwlEUF9PVVQoYmFzZSwgRFBfUkJDSCwgMCk7CisKKwkvKiBFbnRlciBsb29wYmFjayBtb2RlIHdoaWxlIHdlIGNsZWFyIHRoZSBidWZmZXIuICovCisJRFBfT1VUKGJhc2UsIERQX1RDUiwgRFBfVENSX0xPQ0FMKTsKKwlEUF9PVVQoYmFzZSwgRFBfQ1IsIERQX0NSX1NUQVJUIHwgRFBfQ1JfTk9ETUEpOworCisJLyogUmVhZCBpbiBhcyBtYW55IHBhY2tldHMgYXMgd2UgY2FuIGFuZCBhY2tub3dsZWRnZSBhbnkgYW5kIHJlY2VpdmUgKi8KKwkvKiBpbnRlcnJ1cHRzLiAgU2luY2UgdGhlIGJ1ZmZlciBoYXMgb3ZlcmZsb3dlZCwgYSByZWNlaXZlIGV2ZW50IG9mICovCisJLyogc29tZSBraW5kIHdpbGwgaGF2ZSBvY2N1cmVkLiAqLworCWRwODM5MDJhX1J4RXZlbnQoKTsKKwlEUF9PVVQoYmFzZSwgRFBfSVNSLCBEUF9JU1JfUnhQfERQX0lTUl9SeEUpOworCisJLyogQ2xlYXIgdGhlIG92ZXJmbG93IGNvbmRpdGlvbiBhbmQgbGVhdmUgbG9vcGJhY2sgbW9kZS4gKi8KKwlEUF9PVVQoYmFzZSwgRFBfSVNSLCBEUF9JU1JfT0ZMVyk7CisJRFBfT1VUKGJhc2UsIERQX1RDUiwgRFBfVENSX05PUk1BTCk7CisKKwkvKiBJZiBhIHRyYW5zbWl0IGNvbW1hbmQgd2FzIGlzc3VlZCwgYnV0IG5vIHRyYW5zbWl0IGV2ZW50IGhhcyBvY2N1cmVkLCAqLworCS8qIHJlc3RhcnQgaXQgaGVyZS4gKi8KKwlEUF9JTihiYXNlLCBEUF9JU1IsIGlzcik7CisJaWYgKGRwLT50eF9zdGFydGVkICYmICEoaXNyICYgKERQX0lTUl9UeFB8RFBfSVNSX1R4RSkpKSB7CisJCURQX09VVChiYXNlLCBEUF9DUiwgRFBfQ1JfTk9ETUEgfCBEUF9DUl9UWFBLVCB8IERQX0NSX1NUQVJUKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitkcDgzOTAyYV9wb2xsKHZvaWQpCit7CisJc3RydWN0IGRwODM5MDJhX3ByaXZfZGF0YSAqZHAgPSAoc3RydWN0IGRwODM5MDJhX3ByaXZfZGF0YSAqKSAmbmljOworCWN5Z191aW50OCAqYmFzZSA9IGRwLT5iYXNlOworCXVuc2lnbmVkIGNoYXIgaXNyOworCisJRFBfT1VUKGJhc2UsIERQX0NSLCBEUF9DUl9OT0RNQSB8IERQX0NSX1BBR0UwIHwgRFBfQ1JfU1RBUlQpOworCURQX0lOKGJhc2UsIERQX0lTUiwgaXNyKTsKKwl3aGlsZSAoMCAhPSBpc3IpIHsKKwkJLyogVGhlIENOVCBpbnRlcnJ1cHQgdHJpZ2dlcnMgd2hlbiB0aGUgTVNCIG9mIG9uZSBvZiB0aGUgZXJyb3IgKi8KKwkJLyogY291bnRlcnMgaXMgc2V0LiAgV2UgZG9uJ3QgbXVjaCBjYXJlIGFib3V0IHRoZXNlIGNvdW50ZXJzLCBidXQgKi8KKwkJLyogd2Ugc2hvdWxkIHJlYWQgdGhlaXIgdmFsdWVzIHRvIHJlc2V0IHRoZW0uICovCisJCWlmIChpc3IgJiBEUF9JU1JfQ05UKSB7CisJCQlkcDgzOTAyYV9DbGVhckNvdW50ZXJzKCk7CisJCX0KKwkJLyogQ2hlY2sgZm9yIG92ZXJmbG93LiAgSXQncyBhIHNwZWNpYWwgY2FzZSwgc2luY2UgdGhlcmUncyBhICovCisJCS8qIHBhcnRpY3VsYXIgcHJvY2VkdXJlIHRoYXQgbXVzdCBiZSBmb2xsb3dlZCB0byBnZXQgYmFjayBpbnRvICovCisJCS8qIGEgcnVubmluZyBzdGF0ZS5hICovCisJCWlmIChpc3IgJiBEUF9JU1JfT0ZMVykgeworCQkJZHA4MzkwMmFfT3ZlcmZsb3coKTsKKwkJfSBlbHNlIHsKKwkJCS8qIE90aGVyIGtpbmRzIG9mIGludGVycnVwdHMgY2FuIGJlIGFja25vd2xlZGdlZCBzaW1wbHkgYnkgKi8KKwkJCS8qIGNsZWFyaW5nIHRoZSByZWxldmFudCBiaXRzIG9mIHRoZSBJU1IuICBEbyB0aGF0IG5vdywgdGhlbiAqLworCQkJLyogaGFuZGxlIHRoZSBpbnRlcnJ1cHRzIHdlIGNhcmUgYWJvdXQuICovCisJCQlEUF9PVVQoYmFzZSwgRFBfSVNSLCBpc3IpOyAgICAgIC8qIENsZWFyIHNldCBiaXRzICovCisJCQlpZiAoIWRwLT5ydW5uaW5nKSBicmVhazsJLyogSXMgdGhpcyBuZWNlc3Nhcnk/ICovCisJCQkvKiBDaGVjayBmb3IgdHhfc3RhcnRlZCBvbiBUWCBldmVudCBzaW5jZSB0aGVzZSBtYXkgaGFwcGVuICovCisJCQkvKiBzcHVyaW91c2x5IGl0IHNlZW1zLiAqLworCQkJaWYgKGlzciAmIChEUF9JU1JfVHhQfERQX0lTUl9UeEUpICYmIGRwLT50eF9zdGFydGVkKSB7CisJCQkJZHA4MzkwMmFfVHhFdmVudCgpOworCQkJfQorCQkJaWYgKGlzciAmIChEUF9JU1JfUnhQfERQX0lTUl9SeEUpKSB7CisJCQkJZHA4MzkwMmFfUnhFdmVudCgpOworCQkJfQorCQl9CisJCURQX0lOKGJhc2UsIERQX0lTUiwgaXNyKTsKKwl9Cit9CisKKy8qIGZpbmQgcHJvbSAodGFrZW4gZnJvbSBwY19uZXRfY3MuYyBmcm9tIExpbnV4KSAqLworCisjaW5jbHVkZSAiODM5MC5oIgorCit0eXBlZGVmIHN0cnVjdCBod19pbmZvX3QgeworCXVfaW50CW9mZnNldDsKKwl1X2NoYXIJYTAsIGExLCBhMjsKKwl1X2ludAlmbGFnczsKK30gaHdfaW5mb190OworCisjZGVmaW5lIERFTEFZX09VVFBVVAkweDAxCisjZGVmaW5lIEhBU19NSVNDX1JFRwkweDAyCisjZGVmaW5lIFVTRV9CSUdfQlVGCTB4MDQKKyNkZWZpbmUgSEFTX0lCTV9NSVNDCTB4MDgKKyNkZWZpbmUgSVNfREwxMDAxOQkweDEwCisjZGVmaW5lIElTX0RMMTAwMjIJMHgyMAorI2RlZmluZSBIQVNfTUlJCQkweDQwCisjZGVmaW5lIFVTRV9TSE1FTQkweDgwCS8qIGF1dG9kZXRlY3RlZCAqLworCisjZGVmaW5lIEFNNzlDOVhYX0hPTUVfUEhZCTB4MDAwMDZCOTAgIC8qIEhvbWVQTkEgUEhZICovCisjZGVmaW5lIEFNNzlDOVhYX0VUSF9QSFkJMHgwMDAwNkI3MCAgLyogMTBiYXNlVCBQSFkgKi8KKyNkZWZpbmUgTUlJX1BIWUlEX1JFVl9NQVNLCTB4ZmZmZmZmZjAKKyNkZWZpbmUgTUlJX1BIWUlEX1JFRzEJCTB4MDIKKyNkZWZpbmUgTUlJX1BIWUlEX1JFRzIJCTB4MDMKKworc3RhdGljIGh3X2luZm9fdCBod19pbmZvW10gPSB7CisJeyAvKiBBY2N0b24gRU4yMjEyICovIDB4MGZmMCwgMHgwMCwgMHgwMCwgMHhlOCwgREVMQVlfT1VUUFVUIH0sCisJeyAvKiBBbGxpZWQgVGVsZXNpcyBMQS1QQ00gKi8gMHgwZmYwLCAweDAwLCAweDAwLCAweGY0LCAwIH0sCisJeyAvKiBBUEVYIE11bHRpQ2FyZCAqLyAweDAzZjQsIDB4MDAsIDB4MjAsIDB4ZTUsIDAgfSwKKwl7IC8qIEFTQU5URSBGcmllbmRseU5ldCAqLyAweDQ5MTAsIDB4MDAsIDB4MDAsIDB4OTQsCisJICBERUxBWV9PVVRQVVQgfCBIQVNfSUJNX01JU0MgfSwKKwl7IC8qIERhbnBleCBFTi02MjAwUDIgKi8gMHgwMTEwLCAweDAwLCAweDQwLCAweGM3LCAwIH0sCisJeyAvKiBEYXRhVHJlayBOZXRDYXJkICovIDB4MGZmMCwgMHgwMCwgMHgyMCwgMHhlOCwgMCB9LAorCXsgLyogRGF5bmEgQ29tbXVuaUNhcmQgRSAqLyAweDAxMTAsIDB4MDAsIDB4ODAsIDB4MTksIDAgfSwKKwl7IC8qIEQtTGluayBERS02NTAgKi8gMHgwMDQwLCAweDAwLCAweDgwLCAweGM4LCAwIH0sCisJeyAvKiBFUC0yMTAgRXRoZXJuZXQgKi8gMHgwMTEwLCAweDAwLCAweDQwLCAweDMzLCAwIH0sCisJeyAvKiBFUDQwMDAgRXRoZXJuZXQgKi8gMHgwMWMwLCAweDAwLCAweDAwLCAweGI0LCAwIH0sCisJeyAvKiBFcHNvbiBFRU4xMEIgKi8gMHgwZmYwLCAweDAwLCAweDAwLCAweDQ4LAorCSAgSEFTX01JU0NfUkVHIHwgSEFTX0lCTV9NSVNDIH0sCisJeyAvKiBFTEVDT00gTGFuZWVkIExELUNEV0EgKi8gMHhiOCwgMHgwOCwgMHgwMCwgMHg0MiwgMCB9LAorCXsgLyogSHlwZXJ0ZWMgRXRoZXJuZXQgKi8gMHgwMWMwLCAweDAwLCAweDQwLCAweDRjLCAwIH0sCisJeyAvKiBJQk0gQ0NBRSAqLyAweDBmZjAsIDB4MDgsIDB4MDAsIDB4NWEsCisJICBIQVNfTUlTQ19SRUcgfCBIQVNfSUJNX01JU0MgfSwKKwl7IC8qIElCTSBDQ0FFICovIDB4MGZmMCwgMHgwMCwgMHgwNCwgMHhhYywKKwkgIEhBU19NSVNDX1JFRyB8IEhBU19JQk1fTUlTQyB9LAorCXsgLyogSUJNIENDQUUgKi8gMHgwZmYwLCAweDAwLCAweDA2LCAweDI5LAorCSAgSEFTX01JU0NfUkVHIHwgSEFTX0lCTV9NSVNDIH0sCisJeyAvKiBJQk0gRk1FICovIDB4MDM3NCwgMHgwOCwgMHgwMCwgMHg1YSwKKwkgIEhBU19NSVNDX1JFRyB8IEhBU19JQk1fTUlTQyB9LAorCXsgLyogSUJNIEZNRSAqLyAweDAzNzQsIDB4MDAsIDB4MDQsIDB4YWMsCisJICBIQVNfTUlTQ19SRUcgfCBIQVNfSUJNX01JU0MgfSwKKwl7IC8qIEthbnNhaSBLTEEtUENNL1QgKi8gMHgwZmYwLCAweDAwLCAweDYwLCAweDg3LAorCSAgSEFTX01JU0NfUkVHIHwgSEFTX0lCTV9NSVNDIH0sCisJeyAvKiBOU0MgRFA4MzkwMyAqLyAweDAzNzQsIDB4MDgsIDB4MDAsIDB4MTcsCisJICBIQVNfTUlTQ19SRUcgfCBIQVNfSUJNX01JU0MgfSwKKwl7IC8qIE5TQyBEUDgzOTAzICovIDB4MDM3NCwgMHgwMCwgMHhjMCwgMHhhOCwKKwkgIEhBU19NSVNDX1JFRyB8IEhBU19JQk1fTUlTQyB9LAorCXsgLyogTlNDIERQODM5MDMgKi8gMHgwMzc0LCAweDAwLCAweGEwLCAweGIwLAorCSAgSEFTX01JU0NfUkVHIHwgSEFTX0lCTV9NSVNDIH0sCisJeyAvKiBOU0MgRFA4MzkwMyAqLyAweDAxOTgsIDB4MDAsIDB4MjAsIDB4ZTAsCisJICBIQVNfTUlTQ19SRUcgfCBIQVNfSUJNX01JU0MgfSwKKwl7IC8qIEktTyBEQVRBIFBDTEEvVCAqLyAweDBmZjAsIDB4MDAsIDB4YTAsIDB4YjAsIDAgfSwKKwl7IC8qIEthdHJvbiBQRS01MjAgKi8gMHgwMTEwLCAweDAwLCAweDQwLCAweGY2LCAwIH0sCisJeyAvKiBLaW5nc3RvbiBLTkUtUENNL3ggKi8gMHgwZmYwLCAweDAwLCAweGMwLCAweGYwLAorCSAgSEFTX01JU0NfUkVHIHwgSEFTX0lCTV9NSVNDIH0sCisJeyAvKiBLaW5nc3RvbiBLTkUtUENNL3ggKi8gMHgwZmYwLCAweGUyLCAweDBjLCAweDBmLAorCSAgSEFTX01JU0NfUkVHIHwgSEFTX0lCTV9NSVNDIH0sCisJeyAvKiBLaW5nc3RvbiBLTkUtUEMyICovIDB4MDE4MCwgMHgwMCwgMHhjMCwgMHhmMCwgMCB9LAorCXsgLyogTWF4dGVjaCBQQ04yMDAwICovIDB4NTAwMCwgMHgwMCwgMHgwMCwgMHhlOCwgMCB9LAorCXsgLyogTkRDIEluc3RhbnQtTGluayAqLyAweDAwM2EsIDB4MDAsIDB4ODAsIDB4YzYsIDAgfSwKKwl7IC8qIE5FMjAwMCBDb21wYXRpYmxlICovIDB4MGZmMCwgMHgwMCwgMHhhMCwgMHgwYywgMCB9LAorCXsgLyogTmV0d29yayBHZW5lcmFsIFNuaWZmZXIgKi8gMHgwZmYwLCAweDAwLCAweDAwLCAweDY1LAorCSAgSEFTX01JU0NfUkVHIHwgSEFTX0lCTV9NSVNDIH0sCisJeyAvKiBQYW5hc29uaWMgVkVMMjExICovIDB4MGZmMCwgMHgwMCwgMHg4MCwgMHg0NSwKKwkgIEhBU19NSVNDX1JFRyB8IEhBU19JQk1fTUlTQyB9LAorCXsgLyogUHJlTWF4IFBFLTIwMCAqLyAweDA3ZjAsIDB4MDAsIDB4MjAsIDB4ZTAsIDAgfSwKKwl7IC8qIFJQVEkgRVA0MDAgKi8gMHgwMTEwLCAweDAwLCAweDQwLCAweDk1LCAwIH0sCisJeyAvKiBTQ00gRXRoZXJuZXQgKi8gMHgwZmYwLCAweDAwLCAweDIwLCAweGNiLCAwIH0sCisJeyAvKiBTb2NrZXQgRUEgKi8gMHg0MDAwLCAweDAwLCAweGMwLCAweDFiLAorCSAgREVMQVlfT1VUUFVUIHwgSEFTX01JU0NfUkVHIHwgVVNFX0JJR19CVUYgfSwKKwl7IC8qIFNvY2tldCBMUC1FIENGKyAqLyAweDAxYzAsIDB4MDAsIDB4YzAsIDB4MWIsIDAgfSwKKwl7IC8qIFN1cGVyU29ja2V0IFJFNDUwVCAqLyAweDAxMTAsIDB4MDAsIDB4ZTAsIDB4OTgsIDAgfSwKKwl7IC8qIFZvbGt0ZWsgTlBMLTQwMkNUICovIDB4MDA2MCwgMHgwMCwgMHg0MCwgMHgwNSwgMCB9LAorCXsgLyogTkVDIFBDLTk4MDFOLUoxMiAqLyAweDBmZjAsIDB4MDAsIDB4MDAsIDB4NGMsIDAgfSwKKwl7IC8qIFBDTUNJQSBUZWNobm9sb2d5IE9FTSAqLyAweDAxYzgsIDB4MDAsIDB4YTAsIDB4MGMsIDAgfQorfTsKKworI2RlZmluZSBOUl9JTkZPCQkoc2l6ZW9mKGh3X2luZm8pL3NpemVvZihod19pbmZvX3QpKQorCitzdGF0aWMgaHdfaW5mb190IGRlZmF1bHRfaW5mbyA9IHsgMCwgMCwgMCwgMCwgMCB9OworCit1bnNpZ25lZCBjaGFyIGRldl9hZGRyWzZdOworCisjZGVmaW5lIFBDTkVUX0NNRAkweDAwCisjZGVmaW5lIFBDTkVUX0RBVEFQT1JUCTB4MTAJLyogTmF0U2VtaS1kZWZpbmVkIHBvcnQgd2luZG93IG9mZnNldC4gKi8KKyNkZWZpbmUgUENORVRfUkVTRVQJMHgxZgkvKiBJc3N1ZSBhIHJlYWQgdG8gcmVzZXQsIGEgd3JpdGUgdG8gY2xlYXIuICovCisjZGVmaW5lIFBDTkVUX01JU0MJMHgxOAkvKiBGb3IgSUJNIENDQUUgYW5kIFNvY2tldCBFQSBjYXJkcyAqLworCit1bnNpZ25lZCBsb25nIG5pY19iYXNlOworCitzdGF0aWMgdm9pZCBwY25ldF9yZXNldF84MzkwKHZvaWQpCit7CisJaW50IGksIHI7CisKKwlQUklOVEsoIm5pYyBiYXNlIGlzICVseFxuIiwgbmljX2Jhc2UpOworCisjaWYgMQorCW4ya19vdXRiKEU4MzkwX05PRE1BK0U4MzkwX1BBR0UwK0U4MzkwX1NUT1AsIEU4MzkwX0NNRCk7CisJUFJJTlRLKCJjbWQgKGF0ICVseCkgaXMgJXhcbiIsIG5pY19iYXNlKyBFODM5MF9DTUQsIG4ya19pbmIoRTgzOTBfQ01EKSk7CisJbjJrX291dGIoRTgzOTBfTk9ETUErRTgzOTBfUEFHRTErRTgzOTBfU1RPUCwgRTgzOTBfQ01EKTsKKwlQUklOVEsoImNtZCAoYXQgJWx4KSBpcyAleFxuIiwgbmljX2Jhc2UrIEU4MzkwX0NNRCwgbjJrX2luYihFODM5MF9DTUQpKTsKKwluMmtfb3V0YihFODM5MF9OT0RNQStFODM5MF9QQUdFMCtFODM5MF9TVE9QLCBFODM5MF9DTUQpOworCVBSSU5USygiY21kIChhdCAlbHgpIGlzICV4XG4iLCBuaWNfYmFzZSsgRTgzOTBfQ01ELCBuMmtfaW5iKEU4MzkwX0NNRCkpOworI2VuZGlmCisJbjJrX291dGIoRTgzOTBfTk9ETUErRTgzOTBfUEFHRTArRTgzOTBfU1RPUCwgRTgzOTBfQ01EKTsKKworCW4ya19vdXRiKG4ya19pbmIobmljX2Jhc2UgKyBQQ05FVF9SRVNFVCksIFBDTkVUX1JFU0VUKTsKKworCWZvciAoaSA9IDA7IGkgPCAxMDA7IGkrKykgeworCQlpZiAoKHIgPSAobjJrX2luYihFTjBfSVNSKSAmIEVOSVNSX1JFU0VUKSkgIT0gMCkKKwkJCWJyZWFrOworCQlQUklOVEsoImdvdCAleCBpbiByZXNldFxuIiwgcik7CisJCW15X3VkZWxheSgxMDApOworCX0KKwluMmtfb3V0YihFTklTUl9SRVNFVCwgRU4wX0lTUik7IC8qIEFjayBpbnRyLiAqLworCisJaWYgKGkgPT0gMTAwKQorCQlwcmludGYoInBjbmV0X3Jlc2V0XzgzOTAoKSBkaWQgbm90IGNvbXBsZXRlLlxuIik7Cit9IC8qIHBjbmV0X3Jlc2V0XzgzOTAgKi8KKworc3RhdGljIGh3X2luZm9fdCAqIGdldF9wcm9tKHZvaWQgKSB7CisJdW5zaWduZWQgY2hhciBwcm9tWzMyXTsKKwlpbnQgaSwgajsKKwlzdHJ1Y3QgeworCQl1X2NoYXIgdmFsdWUsIG9mZnNldDsKKwl9IHByb2dyYW1fc2VxW10gPSB7CisJCXtFODM5MF9OT0RNQStFODM5MF9QQUdFMCtFODM5MF9TVE9QLCBFODM5MF9DTUR9LCAvKiBTZWxlY3QgcGFnZSAwKi8KKwkJezB4NDgsCUVOMF9EQ0ZHfSwJLyogU2V0IGJ5dGUtd2lkZSAoMHg0OCkgYWNjZXNzLiAqLworCQl7MHgwMCwJRU4wX1JDTlRMT30sCS8qIENsZWFyIHRoZSBjb3VudCByZWdzLiAqLworCQl7MHgwMCwJRU4wX1JDTlRISX0sCisJCXsweDAwLAlFTjBfSU1SfSwJLyogTWFzayBjb21wbGV0aW9uIGlycS4gKi8KKwkJezB4RkYsCUVOMF9JU1J9LAorCQl7RTgzOTBfUlhPRkYsIEVOMF9SWENSfSwJLyogMHgyMCAgU2V0IHRvIG1vbml0b3IgKi8KKwkJe0U4MzkwX1RYT0ZGLCBFTjBfVFhDUn0sCS8qIDB4MDIgIGFuZCBsb29wYmFjayBtb2RlLiAqLworCQl7MzIsCUVOMF9SQ05UTE99LAorCQl7MHgwMCwJRU4wX1JDTlRISX0sCisJCXsweDAwLAlFTjBfUlNBUkxPfSwJLyogRE1BIHN0YXJ0aW5nIGF0IDB4MDAwMC4gKi8KKwkJezB4MDAsCUVOMF9SU0FSSEl9LAorCQl7RTgzOTBfUlJFQUQrRTgzOTBfU1RBUlQsIEU4MzkwX0NNRH0sCisJfTsKKworCVBSSU5USygidHJ5aW5nIHRvIGdldCBNQUMgdmlhIHByb20gcmVhZGluZ1xuIik7CisKKwlwY25ldF9yZXNldF84MzkwKCk7CisKKwltZGVsYXkoMTApOworCisJZm9yIChpID0gMDsgaSA8IHNpemVvZihwcm9ncmFtX3NlcSkvc2l6ZW9mKHByb2dyYW1fc2VxWzBdKTsgaSsrKQorCQluMmtfb3V0Yihwcm9ncmFtX3NlcVtpXS52YWx1ZSwgcHJvZ3JhbV9zZXFbaV0ub2Zmc2V0KTsKKworCVBSSU5USygiUFJPTToiKTsKKwlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgeworCQlwcm9tW2ldID0gbjJrX2luYihQQ05FVF9EQVRBUE9SVCk7CisJCVBSSU5USygiICUwMngiLCBwcm9tW2ldKTsKKwl9CisJUFJJTlRLKCJcbiIpOworCWZvciAoaSA9IDA7IGkgPCBOUl9JTkZPOyBpKyspIHsKKwkJaWYgKChwcm9tWzBdID09IGh3X2luZm9baV0uYTApICYmCisJCSAgICAocHJvbVsyXSA9PSBod19pbmZvW2ldLmExKSAmJgorCQkgICAgKHByb21bNF0gPT0gaHdfaW5mb1tpXS5hMikpIHsKKwkJCVBSSU5USygibWF0Y2hlZCBib2FyZCAlZFxuIiwgaSk7CisJCQlicmVhazsKKwkJfQorCX0KKwlpZiAoKGkgPCBOUl9JTkZPKSB8fCAoKHByb21bMjhdID09IDB4NTcpICYmIChwcm9tWzMwXSA9PSAweDU3KSkpIHsKKwkJZm9yIChqID0gMDsgaiA8IDY7IGorKykKKwkJCWRldl9hZGRyW2pdID0gcHJvbVtqPDwxXTsKKwkJUFJJTlRLKCJvbiBleGl0IGkgaXMgJWQvJWxkXG4iLCBpLCBOUl9JTkZPKTsKKwkJUFJJTlRLKCJNQUMgYWRkcmVzcyBpcyAlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeFxuIiwKKwkJICAgICAgIGRldl9hZGRyWzBdLGRldl9hZGRyWzFdLGRldl9hZGRyWzJdLGRldl9hZGRyWzNdLGRldl9hZGRyWzRdLGRldl9hZGRyWzVdKTsKKwkJcmV0dXJuIChpIDwgTlJfSU5GTykgPyBod19pbmZvK2kgOiAmZGVmYXVsdF9pbmZvOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworLyogVS1ib290IHNwZWNpZmljIHJvdXRpbmVzICovCisKKyNkZWZpbmUgTkIgNQorCitzdGF0aWMgdW5zaWduZWQgY2hhciAqcGJ1ZiA9IE5VTEw7CitzdGF0aWMgaW50IHBsZW5bTkJdOworc3RhdGljIGludCBucnggPSAwOworCitzdGF0aWMgaW50IHBrZXkgPSAtMTsKKwordm9pZCB1Ym9vdF9wdXNoX3BhY2tldF9sZW4oaW50IGxlbikgeworCVBSSU5USygicHVzaGVkIGxlbiA9ICVkLCBucnggPSAlZFxuIiwgbGVuLCBucngpOworCWlmIChsZW4+PTIwMDApIHsKKwkJcHJpbnRmKCJORTIwMDA6IHBhY2tldCB0b28gYmlnXG4iKTsKKwkJcmV0dXJuOworCX0KKwlpZiAobnJ4ID49IE5CKSB7CisJCXByaW50ZigibG9zaW5nIHBhY2tldHMgaW4gcnhcbiIpOworCQlyZXR1cm47CisJfQorCXBsZW5bbnJ4XSA9IGxlbjsKKwlkcDgzOTAyYV9yZWN2KCZwYnVmW25yeCoyMDAwXSwgbGVuKTsKKwlucngrKzsKK30KKwordm9pZCB1Ym9vdF9wdXNoX3R4X2RvbmUoaW50IGtleSwgaW50IHZhbCkgeworCVBSSU5USygicHVzaGVkIGtleSA9ICVkXG4iLCBrZXkpOworCXBrZXkgPSBrZXk7Cit9CisKK2ludCBldGhfaW5pdChiZF90ICpiZCkgeworCXN0YXRpYyBod19pbmZvX3QgKiByOworCWNoYXIgZXRoYWRkclsyMF07CisKKwlQUklOVEsoIiMjIyBldGhfaW5pdFxuIik7CisKKwlpZiAoIXBidWYpIHsKKwkJcGJ1ZiA9IG1hbGxvYyhOQioyMDAwKTsKKwkJaWYgKCFwYnVmKSB7CisJCQlwcmludGYoIkNhbm5vdCBhbGxvY2F0ZSByeCBidWZmZXJzXG4iKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCX0KKworI2lmZGVmIENPTkZJR19EUklWRVJfTkUyMDAwX0NDUgorCXsKKwkJdm9sYXRpbGUgdW5zaWduZWQgY2hhciAqcCA9ICAodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSBDT05GSUdfRFJJVkVSX05FMjAwMF9DQ1I7CisKKwkJUFJJTlRLKCJDQ1IgYmVmb3JlIGlzICV4XG4iLCAqcCk7CisJCSpwID0gQ09ORklHX0RSSVZFUl9ORTIwMDBfVkFMOworCQlQUklOVEsoIkNDUiBhZnRlciBpcyAleFxuIiwgKnApOworCX0KKyNlbmRpZgorCisJbmljX2Jhc2UgPSBDT05GSUdfRFJJVkVSX05FMjAwMF9CQVNFOworCW5pYy5iYXNlID0gKGN5Z191aW50OCAqKSBDT05GSUdfRFJJVkVSX05FMjAwMF9CQVNFOworCisJciA9IGdldF9wcm9tKCk7CisJaWYgKCFyKQorCQlyZXR1cm4gLTE7CisKKwlzcHJpbnRmIChldGhhZGRyLCAiJTAyWDolMDJYOiUwMlg6JTAyWDolMDJYOiUwMlgiLAorCQkgZGV2X2FkZHJbMF0sIGRldl9hZGRyWzFdLAorCQkgZGV2X2FkZHJbMl0sIGRldl9hZGRyWzNdLAorCQkgZGV2X2FkZHJbNF0sIGRldl9hZGRyWzVdKSA7CisJUFJJTlRLKCJTZXQgZW52aXJvbm1lbnQgZnJvbSBIVyBNQUMgYWRkciA9IFwiJXNcIlxuIiwgZXRoYWRkcik7CisJc2V0ZW52ICgiZXRoYWRkciIsIGV0aGFkZHIpOworCisKKyNkZWZpbmUgRFBfREFUQQkJMHgxMAorCW5pYy5kYXRhID0gbmljLmJhc2UgKyBEUF9EQVRBOworCW5pYy50eF9idWYxID0gMHg0MDsKKwluaWMudHhfYnVmMiA9IDB4NDg7CisJbmljLnJ4X2J1Zl9zdGFydCA9IDB4NTA7CisJbmljLnJ4X2J1Zl9lbmQgPSAweDgwOworCisJaWYgKGRwODM5MDJhX2luaXQoKSA9PSBmYWxzZSkKKwkJcmV0dXJuIC0xOworCWRwODM5MDJhX3N0YXJ0KGRldl9hZGRyKTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBldGhfaGFsdCgpIHsKKworCVBSSU5USygiIyMjIGV0aF9oYWx0XG4iKTsKKworCWRwODM5MDJhX3N0b3AoKTsKK30KKworaW50IGV0aF9yeCgpIHsKKwlpbnQgaiwgdG1vOworCisJUFJJTlRLKCIjIyMgZXRoX3J4XG4iKTsKKworCXRtbyA9IGdldF90aW1lciAoMCkgKyBUT1VUICogQ0ZHX0haOworCXdoaWxlKDEpIHsKKwkJZHA4MzkwMmFfcG9sbCgpOworCQlpZiAobnJ4ID4gMCkgeworCQkJZm9yKGo9MDsgajxucng7IGorKykgeworCQkJCU5ldFJlY2VpdmUoJnBidWZbaioyMDAwXSwgcGxlbltqXSk7CisJCQl9CisJCQlucnggPSAwOworCQkJcmV0dXJuIDE7CisJCX0KKwkJaWYgKGdldF90aW1lciAoMCkgPj0gdG1vKSB7CisJCQlwcmludGYoInRpbWVvdXQgZHVyaW5nIHJ4XG4iKTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCXJldHVybiAwOworfQorCitpbnQgZXRoX3NlbmQodm9sYXRpbGUgdm9pZCAqcGFja2V0LCBpbnQgbGVuZ3RoKSB7CisJaW50IHRtbzsKKworCVBSSU5USygiIyMjIGV0aF9zZW5kXG4iKTsKKworCXBrZXkgPSAtMTsKKworCWRwODM5MDJhX3NlbmQoKHVuc2lnbmVkIGNoYXIgKikgcGFja2V0LCBsZW5ndGgsIDY2Nik7CisJdG1vID0gZ2V0X3RpbWVyICgwKSArIFRPVVQgKiBDRkdfSFo7CisJd2hpbGUoMSkgeworCQlkcDgzOTAyYV9wb2xsKCk7CisJCWlmIChwa2V5ICE9IC0xKSB7CisJCQlQUklOVEsoIlBhY2tldCBzdWNlc2Z1bGx5IHNlbnRcbiIpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJaWYgKGdldF90aW1lciAoMCkgPj0gdG1vKSB7CisJCQlwcmludGYoInRyYW5zbWlzc2lvbiBlcnJvciAodGltb2V1dClcbiIpOworCQkJcmV0dXJuIDA7CisJCX0KKworCX0KKwlyZXR1cm4gMDsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25lMjAwMC5oIGIvZHJpdmVycy9uZTIwMDAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTU1NTMzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZTIwMDAuaApAQCAtMCwwICsxLDI3OSBAQAorLyoKK1BvcnRlZCB0byBVLUJvb3QgIGJ5IENocmlzdGlhbiBQZWxsZWdyaW4gPGNocmlAYXNjZW5zaXQuY29tPgorCitCYXNlZCBvbiBzb3VyY2VzIGZyb20gdGhlIExpbnV4IGtlcm5lbCAocGNuZXRfY3MuYywgODM5MC5oKSBhbmQKK2VDT1MoaWZfZHA4MzkwMmEuYywgaWZfZHA4MzkwMmEuaCkuIEJvdGggb2YgdGhlc2UgMiB3b25kZXJmdWwgd29ybGQKK2FyZSBHUEwsIHNvIHRoaXMgaXMsIG9mIGNvdXJzZSwgR1BMLgorCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgICAgIGRldi9kcDgzOTAyYS5oCisKKyAgICAgIE5hdGlvbmFsIFNlbWljb25kdWN0b3IgRFA4MzkwMmEgZXRoZXJuZXQgY2hpcAorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyMjI0VDT1NHUExDT1BZUklHSFRCRUdJTiMjIyMKKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgVGhpcyBmaWxlIGlzIHBhcnQgb2YgZUNvcywgdGhlIEVtYmVkZGVkIENvbmZpZ3VyYWJsZSBPcGVyYXRpbmcgU3lzdGVtLgorIENvcHlyaWdodCAoQykgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiBSZWQgSGF0LCBJbmMuCisKKyBlQ29zIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKKyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIGVDb3MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZCisgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyBmb3IgbW9yZSBkZXRhaWxzLgorCisgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyB3aXRoIGVDb3M7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQS4KKworIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zCisgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUgdGhpcyBmaWxlIGFuZCBsaW5rIGl0Cisgd2l0aCBvdGhlciB3b3JrcyB0byBwcm9kdWNlIGEgd29yayBiYXNlZCBvbiB0aGlzIGZpbGUsIHRoaXMgZmlsZSBkb2VzIG5vdAorIGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIHdvcmsgdG8gYmUgY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgTGljZW5zZS4gSG93ZXZlciB0aGUgc291cmNlIGNvZGUgZm9yIHRoaXMgZmlsZSBtdXN0IHN0aWxsIGJlIG1hZGUgYXZhaWxhYmxlCisgaW4gYWNjb3JkYW5jZSB3aXRoIHNlY3Rpb24gKDMpIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKworIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IGEgd29yayBiYXNlZCBvbgorIHRoaXMgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKworIEFsdGVybmF0aXZlIGxpY2Vuc2VzIGZvciBlQ29zIG1heSBiZSBhcnJhbmdlZCBieSBjb250YWN0aW5nIFJlZCBIYXQsIEluYy4KKyBhdCBodHRwOi8vc291cmNlcy5yZWRoYXQuY29tL2Vjb3MvZWNvcy1saWNlbnNlLyAqLworIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMjIyNFQ09TR1BMQ09QWVJJR0hURU5EIyMjIworIyMjI0JTRENPUFlSSUdIVEJFR0lOIyMjIworCisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgUG9ydGlvbnMgb2YgdGhpcyBzb2Z0d2FyZSBtYXkgaGF2ZSBiZWVuIGRlcml2ZWQgZnJvbSBPcGVuQlNEIG9yIG90aGVyIHNvdXJjZXMsCisgYW5kIGFyZSBjb3ZlcmVkIGJ5IHRoZSBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgZGlzY2xhaW1lcnMgaW5jbHVkZWQgaGVyZWluLgorCisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIyMjQlNEQ09QWVJJR0hURU5EIyMjIworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMjIyMjREVTQ1JJUFRJT05CRUdJTiMjIyMKKworIEF1dGhvcihzKTogICAgZ3Rob21hcworIENvbnRyaWJ1dG9yczogZ3Rob21hcywganNrb3YKKyBEYXRlOiAgICAgICAgIDIwMDEtMDYtMTMKKyBQdXJwb3NlOgorIERlc2NyaXB0aW9uOgorCisjIyMjREVTQ1JJUFRJT05FTkQjIyMjCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyovCisKKy8qCisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTWFjcm9zIGZvciBhY2Nlc3NpbmcgRFAgcmVnaXN0ZXJzCisgVGhlc2UgY2FuIGJlIG92ZXJyaWRkZW4gYnkgdGhlIHBsYXRmb3JtIGhlYWRlcgorKi8KKworI2RlZmluZSBEUF9JTihfYl8sIF9vXywgX2RfKSAgKF9kXykgPSAqKCAodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSAoKF9iXykrKF9vXykpKQorI2RlZmluZSBEUF9PVVQoX2JfLCBfb18sIF9kXykgKiggKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikgKChfYl8pKyhfb18pKSkgPSAoX2RfKQorCisjZGVmaW5lIERQX0lOX0RBVEEoX2JfLCBfZF8pICAoX2RfKSA9ICooICh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopICgoX2JfKSkpCisjZGVmaW5lIERQX09VVF9EQVRBKF9iXywgX2RfKSAqKCAodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSAoKF9iXykpKSA9IChfZF8pCisKKworLyogaGVyZSBpcyBhbGwgdGhlIGRhdGEgKi8KKworI2RlZmluZSBjeWdfdWludDggdW5zaWduZWQgY2hhcgorI2RlZmluZSBjeWdfdWludDE2IHVuc2lnbmVkIHNob3J0CisjZGVmaW5lIGJvb2wgaW50CisKKyNkZWZpbmUgZmFsc2UgMAorI2RlZmluZSB0cnVlIDEKKworI2RlZmluZSBDWUdIV1JfTlNfRFA4MzkwMkFfUExGX0JST0tFTl9UWF9ETUEgMQorI2RlZmluZSBDWUdBQ0NfQ0FMTF9JRl9ERUxBWV9VUyhYKSBteV91ZGVsYXkoWCkKKwordHlwZWRlZiBzdHJ1Y3QgZHA4MzkwMmFfcHJpdl9kYXRhIHsKKyAgICBjeWdfdWludDgqIGJhc2U7CisgICAgY3lnX3VpbnQ4KiBkYXRhOworICAgIGN5Z191aW50OCogcmVzZXQ7CisgICAgaW50IHR4X25leHQ7ICAgICAgICAgICAvKiBGaXJzdCBmcmVlIFR4IHBhZ2UgKi8KKyAgICBpbnQgdHhfaW50OyAgICAgICAgICAgIC8qIEV4cGVjdGluZyBpbnRlcnJ1cHQgZnJvbSB0aGlzIGJ1ZmZlciAqLworICAgIGludCByeF9uZXh0OyAgICAgICAgICAgLyogRmlyc3QgZnJlZSBSeCBwYWdlICovCisgICAgaW50IHR4MSwgdHgyOyAgICAgICAgICAvKiBQYWdlIG51bWJlcnMgZm9yIFR4IGJ1ZmZlcnMgKi8KKyAgICB1bnNpZ25lZCBsb25nIHR4MV9rZXksIHR4Ml9rZXk7ICAgLyogVXNlZCB0byBhY2sgd2hlbiBwYWNrZXQgc2VudCAqLworICAgIGludCB0eDFfbGVuLCB0eDJfbGVuOworICAgIGJvb2wgdHhfc3RhcnRlZCwgcnVubmluZywgaGFyZHdpcmVkX2VzYTsKKyAgICBjeWdfdWludDggZXNhWzZdOworICAgIHZvaWQqIHBsZl9wcml2OworCisgICAgLyogQnVmZmVyIGFsbG9jYXRpb24gKi8KKyAgICBpbnQgdHhfYnVmMSwgdHhfYnVmMjsKKyAgICBpbnQgcnhfYnVmX3N0YXJ0LCByeF9idWZfZW5kOworfSBkcDgzOTAyYV9wcml2X2RhdGFfdDsKKworLyoKKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTb21lIGZvcndhcmQgZGVjbGFyYXRpb25zCisqLworc3RhdGljIHZvaWQgZHA4MzkwMmFfcG9sbCh2b2lkKTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiBSZWdpc3RlciBvZmZzZXRzICovCisKKyNkZWZpbmUgRFBfQ1IgICAgICAgICAgMHgwMAorI2RlZmluZSBEUF9DTERBMCAgICAgICAweDAxCisjZGVmaW5lIERQX1BTVEFSVCAgICAgIDB4MDEgICAgICAgICAgICAgLyogd3JpdGUgKi8KKyNkZWZpbmUgRFBfQ0xEQTEgICAgICAgMHgwMgorI2RlZmluZSBEUF9QU1RPUCAgICAgICAweDAyICAgICAgICAgICAgIC8qIHdyaXRlICovCisjZGVmaW5lIERQX0JORFJZICAgICAgIDB4MDMKKyNkZWZpbmUgRFBfVFNSICAgICAgICAgMHgwNAorI2RlZmluZSBEUF9UUFNSICAgICAgICAweDA0ICAgICAgICAgICAgIC8qIHdyaXRlICovCisjZGVmaW5lIERQX05DUiAgICAgICAgIDB4MDUKKyNkZWZpbmUgRFBfVEJDTCAgICAgICAgMHgwNSAgICAgICAgICAgICAvKiB3cml0ZSAqLworI2RlZmluZSBEUF9GSUZPICAgICAgICAweDA2CisjZGVmaW5lIERQX1RCQ0ggICAgICAgIDB4MDYgICAgICAgICAgICAgLyogd3JpdGUgKi8KKyNkZWZpbmUgRFBfSVNSICAgICAgICAgMHgwNworI2RlZmluZSBEUF9DUkRBMCAgICAgICAweDA4CisjZGVmaW5lIERQX1JTQUwgICAgICAgIDB4MDggICAgICAgICAgICAgLyogd3JpdGUgKi8KKyNkZWZpbmUgRFBfQ1JEQTEgICAgICAgMHgwOQorI2RlZmluZSBEUF9SU0FIICAgICAgICAweDA5ICAgICAgICAgICAgIC8qIHdyaXRlICovCisjZGVmaW5lIERQX1JCQ0wgICAgICAgIDB4MGEgICAgICAgICAgICAgLyogd3JpdGUgKi8KKyNkZWZpbmUgRFBfUkJDSCAgICAgICAgMHgwYiAgICAgICAgICAgICAvKiB3cml0ZSAqLworI2RlZmluZSBEUF9SU1IgICAgICAgICAweDBjCisjZGVmaW5lIERQX1JDUiAgICAgICAgIDB4MGMgICAgICAgICAgICAgLyogd3JpdGUgKi8KKyNkZWZpbmUgRFBfRkVSICAgICAgICAgMHgwZAorI2RlZmluZSBEUF9UQ1IgICAgICAgICAweDBkICAgICAgICAgICAgIC8qIHdyaXRlICovCisjZGVmaW5lIERQX0NFUiAgICAgICAgIDB4MGUKKyNkZWZpbmUgRFBfRENSICAgICAgICAgMHgwZSAgICAgICAgICAgICAvKiB3cml0ZSAqLworI2RlZmluZSBEUF9NSVNTRUQgICAgICAweDBmCisjZGVmaW5lIERQX0lNUiAgICAgICAgIDB4MGYgICAgICAgICAgICAgLyogd3JpdGUgKi8KKyNkZWZpbmUgRFBfREFUQVBPUlQgICAgMHgxMCAgICAgICAgICAgICAvKiAiZXByb20iIGRhdGEgcG9ydCAqLworCisjZGVmaW5lIERQX1AxX0NSICAgICAgIDB4MDAKKyNkZWZpbmUgRFBfUDFfUEFSMCAgICAgMHgwMQorI2RlZmluZSBEUF9QMV9QQVIxICAgICAweDAyCisjZGVmaW5lIERQX1AxX1BBUjIgICAgIDB4MDMKKyNkZWZpbmUgRFBfUDFfUEFSMyAgICAgMHgwNAorI2RlZmluZSBEUF9QMV9QQVI0ICAgICAweDA1CisjZGVmaW5lIERQX1AxX1BBUjUgICAgIDB4MDYKKyNkZWZpbmUgRFBfUDFfQ1VSUCAgICAgMHgwNworI2RlZmluZSBEUF9QMV9NQVIwICAgICAweDA4CisjZGVmaW5lIERQX1AxX01BUjEgICAgIDB4MDkKKyNkZWZpbmUgRFBfUDFfTUFSMiAgICAgMHgwYQorI2RlZmluZSBEUF9QMV9NQVIzICAgICAweDBiCisjZGVmaW5lIERQX1AxX01BUjQgICAgIDB4MGMKKyNkZWZpbmUgRFBfUDFfTUFSNSAgICAgMHgwZAorI2RlZmluZSBEUF9QMV9NQVI2ICAgICAweDBlCisjZGVmaW5lIERQX1AxX01BUjcgICAgIDB4MGYKKworI2RlZmluZSBEUF9QMl9DUiAgICAgICAweDAwCisjZGVmaW5lIERQX1AyX1BTVEFSVCAgIDB4MDEKKyNkZWZpbmUgRFBfUDJfQ0xEQTAgICAgMHgwMSAgICAgICAgICAgICAvKiB3cml0ZSAqLworI2RlZmluZSBEUF9QMl9QU1RPUCAgICAweDAyCisjZGVmaW5lIERQX1AyX0NMREExICAgIDB4MDIgICAgICAgICAgICAgLyogd3JpdGUgKi8KKyNkZWZpbmUgRFBfUDJfUk5QUCAgICAgMHgwMworI2RlZmluZSBEUF9QMl9UUFNSICAgICAweDA0CisjZGVmaW5lIERQX1AyX0xOUFAgICAgIDB4MDUKKyNkZWZpbmUgRFBfUDJfQUNIICAgICAgMHgwNgorI2RlZmluZSBEUF9QMl9BQ0wgICAgICAweDA3CisjZGVmaW5lIERQX1AyX1JDUiAgICAgIDB4MGMKKyNkZWZpbmUgRFBfUDJfVENSICAgICAgMHgwZAorI2RlZmluZSBEUF9QMl9EQ1IgICAgICAweDBlCisjZGVmaW5lIERQX1AyX0lNUiAgICAgIDB4MGYKKworLyogQ29tbWFuZCByZWdpc3RlciAtIGNvbW1vbiB0byBhbGwgcGFnZXMgKi8KKworI2RlZmluZSBEUF9DUl9TVE9QICAgIDB4MDEgICAvKiBTdG9wOiBzb2Z0d2FyZSByZXNldCAqLworI2RlZmluZSBEUF9DUl9TVEFSVCAgIDB4MDIgICAvKiBTdGFydDogaW5pdGlhbGl6ZSBkZXZpY2UgKi8KKyNkZWZpbmUgRFBfQ1JfVFhQS1QgICAweDA0ICAgLyogVHJhbnNtaXQgcGFja2V0ICovCisjZGVmaW5lIERQX0NSX1JETUEgICAgMHgwOCAgIC8qIFJlYWQgRE1BICAocmVjdiBkYXRhIGZyb20gZGV2aWNlKSAqLworI2RlZmluZSBEUF9DUl9XRE1BICAgIDB4MTAgICAvKiBXcml0ZSBETUEgKHNlbmQgZGF0YSB0byBkZXZpY2UpICovCisjZGVmaW5lIERQX0NSX1NFTkQgICAgMHgxOCAgIC8qIFNlbmQgcGFja2V0ICovCisjZGVmaW5lIERQX0NSX05PRE1BICAgMHgyMCAgIC8qIFJlbW90ZSAob3Igbm8pIERNQSAqLworI2RlZmluZSBEUF9DUl9QQUdFMCAgIDB4MDAgICAvKiBQYWdlIHNlbGVjdCAqLworI2RlZmluZSBEUF9DUl9QQUdFMSAgIDB4NDAKKyNkZWZpbmUgRFBfQ1JfUEFHRTIgICAweDgwCisjZGVmaW5lIERQX0NSX1BBR0VNU0sgMHgzRiAgIC8qIFVzZWQgdG8gbWFzayBvdXQgcGFnZSBiaXRzICovCisKKy8qIERhdGEgY29uZmlndXJhdGlvbiByZWdpc3RlciAqLworCisjZGVmaW5lIERQX0RDUl9XVFMgICAgMHgwMSAgIC8qIDE9MTYgYml0IHdvcmQgdHJhbnNmZXJzICovCisjZGVmaW5lIERQX0RDUl9CT1MgICAgMHgwMiAgIC8qIDE9TGl0dGxlIEVuZGlhbiAqLworI2RlZmluZSBEUF9EQ1JfTEFTICAgIDB4MDQgICAvKiAxPVNpbmdsZSAzMiBiaXQgRE1BIG1vZGUgKi8KKyNkZWZpbmUgRFBfRENSX0xTICAgICAweDA4ICAgLyogMT1ub3JtYWwgbW9kZSwgMD1sb29wYmFjayAqLworI2RlZmluZSBEUF9EQ1JfQVJNICAgIDB4MTAgICAvKiAwPW5vIHNlbmQgY29tbWFuZCAocHJvZ3JhbSBJL08pICovCisjZGVmaW5lIERQX0RDUl9GSUZPXzEgMHgwMCAgIC8qIEZJRk8gdGhyZXNob2xkICovCisjZGVmaW5lIERQX0RDUl9GSUZPXzIgMHgyMAorI2RlZmluZSBEUF9EQ1JfRklGT180IDB4NDAKKyNkZWZpbmUgRFBfRENSX0ZJRk9fNiAweDYwCisKKyNkZWZpbmUgRFBfRENSX0lOSVQgICAoRFBfRENSX0xTfERQX0RDUl9GSUZPXzQpCisKKy8qIEludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIgKi8KKworI2RlZmluZSBEUF9JU1JfUnhQICAgIDB4MDEgICAvKiBQYWNrZXQgcmVjZWl2ZWQgKi8KKyNkZWZpbmUgRFBfSVNSX1R4UCAgICAweDAyICAgLyogUGFja2V0IHRyYW5zbWl0dGVkICovCisjZGVmaW5lIERQX0lTUl9SeEUgICAgMHgwNCAgIC8qIFJlY2VpdmUgZXJyb3IgKi8KKyNkZWZpbmUgRFBfSVNSX1R4RSAgICAweDA4ICAgLyogVHJhbnNtaXQgZXJyb3IgKi8KKyNkZWZpbmUgRFBfSVNSX09GTFcgICAweDEwICAgLyogUmVjZWl2ZSBvdmVyZmxvdyAqLworI2RlZmluZSBEUF9JU1JfQ05UICAgIDB4MjAgICAvKiBUYWxseSBjb3VudGVycyBuZWVkIGVtcHR5aW5nICovCisjZGVmaW5lIERQX0lTUl9SREMgICAgMHg0MCAgIC8qIFJlbW90ZSBETUEgY29tcGxldGUgKi8KKyNkZWZpbmUgRFBfSVNSX1JFU0VUICAweDgwICAgLyogRGV2aWNlIGhhcyByZXNldCAoc2h1dGRvd24sIGVycm9yKSAqLworCisvKiBJbnRlcnJ1cHQgbWFzayByZWdpc3RlciAqLworCisjZGVmaW5lIERQX0lNUl9SeFAgICAgMHgwMSAgIC8qIFBhY2tldCByZWNlaXZlZCAqLworI2RlZmluZSBEUF9JTVJfVHhQICAgIDB4MDIgICAvKiBQYWNrZXQgdHJhbnNtaXR0ZWQgKi8KKyNkZWZpbmUgRFBfSU1SX1J4RSAgICAweDA0ICAgLyogUmVjZWl2ZSBlcnJvciAqLworI2RlZmluZSBEUF9JTVJfVHhFICAgIDB4MDggICAvKiBUcmFuc21pdCBlcnJvciAqLworI2RlZmluZSBEUF9JTVJfT0ZMVyAgIDB4MTAgICAvKiBSZWNlaXZlIG92ZXJmbG93ICovCisjZGVmaW5lIERQX0lNUl9DTlQgICAgMHgyMCAgIC8qIFRhbGwgY291bnRlcnMgbmVlZCBlbXB0eWluZyAqLworI2RlZmluZSBEUF9JTVJfUkRDICAgIDB4NDAgICAvKiBSZW1vdGUgRE1BIGNvbXBsZXRlICovCisKKyNkZWZpbmUgRFBfSU1SX0FsbCAgICAweDNGICAgLyogRXZlcnl0aGluZyBidXQgcmVtb3RlIERNQSAqLworCisvKiBSZWNlaXZlciBjb250cm9sIHJlZ2lzdGVyICovCisKKyNkZWZpbmUgRFBfUkNSX1NFUCAgICAweDAxICAgLyogU2F2ZSBiYWQoZXJyb3IpIHBhY2tldHMgKi8KKyNkZWZpbmUgRFBfUkNSX0FSICAgICAweDAyICAgLyogQWNjZXB0IHJ1bnQgcGFja2V0cyAqLworI2RlZmluZSBEUF9SQ1JfQUIgICAgIDB4MDQgICAvKiBBY2NlcHQgYnJvYWRjYXN0IHBhY2tldHMgKi8KKyNkZWZpbmUgRFBfUkNSX0FNICAgICAweDA4ICAgLyogQWNjZXB0IG11bHRpY2FzdCBwYWNrZXRzICovCisjZGVmaW5lIERQX1JDUl9QUk9NICAgMHgxMCAgIC8qIFByb21pc2N1b3VzIG1vZGUgKi8KKyNkZWZpbmUgRFBfUkNSX01PTiAgICAweDIwICAgLyogTW9uaXRvciBtb2RlIC0gMT1hY2NlcHQgbm8gcGFja2V0cyAqLworCisvKiBSZWNlaXZlciBzdGF0dXMgcmVnaXN0ZXIgKi8KKworI2RlZmluZSBEUF9SU1JfUnhQICAgIDB4MDEgICAvKiBQYWNrZXQgcmVjZWl2ZWQgKi8KKyNkZWZpbmUgRFBfUlNSX0NSQyAgICAweDAyICAgLyogQ1JDIGVycm9yICovCisjZGVmaW5lIERQX1JTUl9GUkFNRSAgMHgwNCAgIC8qIEZyYW1pbmcgZXJyb3IgKi8KKyNkZWZpbmUgRFBfUlNSX0ZPICAgICAweDA4ICAgLyogRklGTyBvdmVycnVuICovCisjZGVmaW5lIERQX1JTUl9NSVNTICAgMHgxMCAgIC8qIE1pc3NlZCBwYWNrZXQgKi8KKyNkZWZpbmUgRFBfUlNSX1BIWSAgICAweDIwICAgLyogMD1wYWQgbWF0Y2gsIDE9bWFkIG1hdGNoICovCisjZGVmaW5lIERQX1JTUl9ESVMgICAgMHg0MCAgIC8qIFJlY2VpdmVyIGRpc2FibGVkICovCisjZGVmaW5lIERQX1JTUl9ERlIgICAgMHg4MCAgIC8qIFJlY2VpdmVyIHByb2Nlc3NpbmcgZGVmZXJyZWQgKi8KKworLyogVHJhbnNtaXR0ZXIgY29udHJvbCByZWdpc3RlciAqLworCisjZGVmaW5lIERQX1RDUl9OT0NSQyAgMHgwMSAgIC8qIDE9aW5oaWJpdCBDUkMgKi8KKyNkZWZpbmUgRFBfVENSX05PUk1BTCAweDAwICAgLyogTm9ybWFsIHRyYW5zbWl0dGVyIG9wZXJhdGlvbiAqLworI2RlZmluZSBEUF9UQ1JfTE9DQUwgIDB4MDIgICAvKiBJbnRlcm5hbCBOSUMgbG9vcGJhY2sgKi8KKyNkZWZpbmUgRFBfVENSX0lOTE9PUCAweDA0ICAgLyogRnVsbCBpbnRlcm5hbCBsb29wYmFjayAqLworI2RlZmluZSBEUF9UQ1JfT1VUTE9PUCAweDA4ICAvKiBFeHRlcm5hbCBsb29wYmFjayAqLworI2RlZmluZSBEUF9UQ1JfQVREICAgIDB4MTAgICAvKiBBdXRvIHRyYW5zbWl0IGRpc2FibGUgKi8KKyNkZWZpbmUgRFBfVENSX09GRlNFVCAweDIwICAgLyogQ29sbGlzaW9uIG9mZnNldCBhZGp1c3QgKi8KKworLyogVHJhbnNtaXQgc3RhdHVzIHJlZ2lzdGVyICovCisKKyNkZWZpbmUgRFBfVFNSX1R4UCAgICAweDAxICAgLyogUGFja2V0IHRyYW5zbWl0dGVkICovCisjZGVmaW5lIERQX1RTUl9DT0wgICAgMHgwNCAgIC8qIENvbGxpc2lvbiAoYXQgbGVhc3Qgb25lKSAqLworI2RlZmluZSBEUF9UU1JfQUJUICAgIDB4MDggICAvKiBBYm9ydGVkIGJlY2F1c2Ugb2YgdG9vIG1hbnkgY29sbGlzaW9ucyAqLworI2RlZmluZSBEUF9UU1JfQ1JTICAgIDB4MTAgICAvKiBMb3N0IGNhcnJpZXIgKi8KKyNkZWZpbmUgRFBfVFNSX0ZVICAgICAweDIwICAgLyogRklGTyB1bmRlcnJ1biAqLworI2RlZmluZSBEUF9UU1JfQ0RIICAgIDB4NDAgICAvKiBDb2xsaXNpb24gRGV0ZWN0IEhlYXJ0YmVhdCAqLworI2RlZmluZSBEUF9UU1JfT1dDICAgIDB4ODAgICAvKiBDb2xsaXNpb24gb3V0c2lkZSBub3JtYWwgd2luZG93ICovCisKKyNkZWZpbmUgSUVFRV84MDIzX01BWF9GUkFNRSAgICAgICAgIDE1MTggICAgLyogTGFyZ2VzdCBwb3NzaWJsZSBldGhlcm5ldCBmcmFtZSAqLworI2RlZmluZSBJRUVFXzgwMjNfTUlOX0ZSQU1FICAgICAgICAgICA2NCAgICAvKiBTbWFsbGVzdCBwb3NzaWJsZSBldGhlcm5ldCBmcmFtZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uczE2NTUwLmMgYi9kcml2ZXJzL25zMTY1NTAuYwppbmRleCBmOWZlODE5Li4yNDI5NDY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25zMTY1NTAuYworKysgYi9kcml2ZXJzL25zMTY1NTAuYwpAQCAtMTcsNyArMTcsNyBAQAogdm9pZCBOUzE2NTUwX2luaXQgKE5TMTY1NTBfdCBjb21fcG9ydCwgaW50IGJhdWRfZGl2aXNvcikKIHsKIAljb21fcG9ydC0+aWVyID0gMHgwMDsKLSNpZmRlZiBDT05GSUdfT01BUDE1MTAKKyNpZmRlZiBDT05GSUdfT01BUAogCWNvbV9wb3J0LT5tZHIxID0gMHg3OwkvKiBtb2RlIHNlbGVjdCByZXNldCBUTDE2Qzc1MCovCiAjZW5kaWYKIAljb21fcG9ydC0+bGNyID0gTENSX0JLU0UgfCBMQ1JWQUw7CkBAIC0yNiw4ICsyNiwxMiBAQAogCWNvbV9wb3J0LT5sY3IgPSBMQ1JWQUw7CiAJY29tX3BvcnQtPm1jciA9IE1DUlZBTDsKIAljb21fcG9ydC0+ZmNyID0gRkNSVkFMOwotI2lmIGRlZmluZWQoQ09ORklHX09NQVAxNTEwKSB8fCBkZWZpbmVkKENPTkZJR19PTUFQMTYxMCkgfHwgZGVmaW5lZChDT05GSUdfT01BUDczMCkKLQljb21fcG9ydC0+bWRyMSA9IDA7CS8qIHNlbGVjdCB1YXJ0IG1vZGUgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19PTUFQKQorI2lmIGRlZmluZWQoQ09ORklHX0FQVElYKQorCWNvbV9wb3J0LT5tZHIxID0gMzsJLyogLzEzIG1vZGUgc28gQXB0aXggNk1IeiBjYW4gaGl0IDExNTIwMCAqLworI2Vsc2UKKwljb21fcG9ydC0+bWRyMSA9IDA7CS8qIC8xNiBpcyBwcm9wZXIgdG8gaGl0IDExNTIwMCB3aXRoIDQ4TUh6ICovCisjZW5kaWYKICNlbmRpZgogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL29tYXAyNHh4X2kyYy5jIGIvZHJpdmVycy9vbWFwMjR4eF9pMmMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDIzODYzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9vbWFwMjR4eF9pMmMuYwpAQCAtMCwwICsxLDMxNyBAQAorLyoKKyAqIEJhc2ljIEkyQyBmdW5jdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQgVGV4YXMgSW5zdHJ1bWVudHMKKyAqCisgKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgIHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgbGljZW5zZSBmb3VuZCBpbiB0aGUgZmlsZQorICogbmFtZWQgQ09QWUlORyB0aGF0IHNob3VsZCBoYXZlIGFjY29tcGFuaWVkIHRoaXMgZmlsZS4KKyAqCisgKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICoKKyAqIEF1dGhvcjogSmlhbiBaaGFuZyBqemhhbmdAdGkuY29tLCBUZXhhcyBJbnN0cnVtZW50cworICoKKyAqIENvcHlyaWdodCAoYykgMjAwMyBXb2xmZ2FuZyBEZW5rLCB3ZEBkZW54LmRlCisgKiBSZXdyaXR0ZW4gdG8gZml0IGludG8gdGhlIGN1cnJlbnQgVS1Cb290IGZyYW1ld29yaworICoKKyAqIEFkYXB0ZWQgZm9yIE9NQVAyNDIwIEkyQywgci13b29kcnVmZjJAdGkuY29tCisgKgorICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9pMmMuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKworI2RlZmluZSBpbncoYSkgX19yYXdfcmVhZHcoYSkKKyNkZWZpbmUgb3V0dyhhLHYpIF9fcmF3X3dyaXRldyhhLHYpCisKKyNpZmRlZiBDT05GSUdfRFJJVkVSX09NQVAyNFhYX0kyQworCitzdGF0aWMgdm9pZCB3YWl0X2Zvcl9iYiAodm9pZCk7CitzdGF0aWMgdTE2IHdhaXRfZm9yX3BpbiAodm9pZCk7Cit2b2lkIGZsdXNoX2ZpZm8odm9pZCk7CisKK3ZvaWQgaTJjX2luaXQgKGludCBzcGVlZCwgaW50IHNsYXZlYWRkKQoreworCXUxNiBzY2w7CisKKwlpZiAoaW53IChJMkNfQ09OKSAmIEkyQ19DT05fRU4pIHsKKwkJb3V0dyAoMCwgSTJDX0NPTik7CisJCXVkZWxheSAoNTAwMDApOworCX0KKworCS8qIDEyTWh6IEkyQyBtb2R1bGUgY2xvY2sgKi8KKwlvdXR3ICgwLCBJMkNfUFNDKTsKKyAgICAgICAgc3BlZWQgPSBzcGVlZC8xMDAwOyAgICAgICAgICAgICAgICAgLyogMTAwIG9yIDQwMCAqLworICAgICAgICBzY2wgPSAoKDEyMDAwLyhzcGVlZCoyKSkgLSA3KTsgIC8qIHVzZSA3IHdoZW4gUFNDID0gMCAqLworCW91dHcgKHNjbCwgSTJDX1NDTEwpOworCW91dHcgKHNjbCwgSTJDX1NDTEgpOworCS8qIG93biBhZGRyZXNzICovCisJb3V0dyAoc2xhdmVhZGQsIEkyQ19PQSk7CisJb3V0dyAoSTJDX0NPTl9FTiwgSTJDX0NPTik7CisJb3V0dyAoMCwgSTJDX0NOVCk7CisJLyogaGF2ZSB0byBlbmFibGUgaW50cnJ1cHRzIG9yIE9NQVAgaTJjIG1vZHVsZSBkb2Vzbid0IHdvcmsgKi8KKwlvdXR3IChJMkNfSUVfWFJEWV9JRSB8IEkyQ19JRV9SUkRZX0lFIHwgSTJDX0lFX0FSRFlfSUUgfAorCSAgICAgIEkyQ19JRV9OQUNLX0lFIHwgSTJDX0lFX0FMX0lFLCBJMkNfSUUpOworCXVkZWxheSAoMTAwMCk7Cit9CisKK3N0YXRpYyBpbnQgaTJjX3JlYWRfYnl0ZSAodTggZGV2YWRkciwgdTggcmVnb2Zmc2V0LCB1OCAqIHZhbHVlKQoreworCWludCBpMmNfZXJyb3IgPSAwOworCXUxNiBzdGF0dXM7CisKKwkvKiB3YWl0IHVudGlsIGJ1cyBub3QgYnVzeSAqLworCXdhaXRfZm9yX2JiICgpOworCisJLyogb25lIGJ5dGUgb25seSAqLworCW91dHcgKDEsIEkyQ19DTlQpOworCS8qIHNldCBzbGF2ZSBhZGRyZXNzICovCisJb3V0dyAoZGV2YWRkciwgSTJDX1NBKTsKKwkvKiBubyBzdG9wIGJpdCBuZWVkZWQgaGVyZSAqLworCW91dHcgKEkyQ19DT05fRU4gfCBJMkNfQ09OX01TVCB8IEkyQ19DT05fU1RUIHwgSTJDX0NPTl9UUlgsIEkyQ19DT04pOworCisJc3RhdHVzID0gd2FpdF9mb3JfcGluICgpOworCisJaWYgKHN0YXR1cyAmIEkyQ19TVEFUX1hSRFkpIHsKKwkJLyogSW1wb3J0YW50OiBoYXZlIHRvIHVzZSBieXRlIGFjY2VzcyAqLworCQkqKHZvbGF0aWxlIHU4ICopIChJMkNfREFUQSkgPSByZWdvZmZzZXQ7CisJCXVkZWxheSAoMjAwMDApOworCQlpZiAoaW53IChJMkNfU1RBVCkgJiBJMkNfU1RBVF9OQUNLKSB7CisJCQlpMmNfZXJyb3IgPSAxOworCQl9CisJfSBlbHNlIHsKKwkJaTJjX2Vycm9yID0gMTsKKwl9CisKKwlpZiAoIWkyY19lcnJvcikgeworCQkvKiBmcmVlIGJ1cywgb3RoZXJ3aXNlIHdlIGNhbid0IHVzZSBhIGNvbWJpbmVkIHRyYW5zY3Rpb24gKi8KKwkJb3V0dyAoMCwgSTJDX0NPTik7CisJCXdoaWxlIChpbncgKEkyQ19TVEFUKSB8fCAoaW53IChJMkNfQ09OKSAmIEkyQ19DT05fTVNUKSkgeworCQkJdWRlbGF5ICgxMDAwMCk7CisJCQkvKiBIYXZlIHRvIGNsZWFyIHBlbmRpbmcgaW50ZXJydXB0IHRvIGNsZWFyIEkyQ19TVEFUICovCisJCQlvdXR3ICgweEZGRkYsIEkyQ19TVEFUKTsKKwkJfQorCisJCXdhaXRfZm9yX2JiICgpOworCQkvKiBzZXQgc2xhdmUgYWRkcmVzcyAqLworCQlvdXR3IChkZXZhZGRyLCBJMkNfU0EpOworCQkvKiByZWFkIG9uZSBieXRlIGZyb20gc2xhdmUgKi8KKwkJb3V0dyAoMSwgSTJDX0NOVCk7CisJCS8qIG5lZWQgc3RvcCBiaXQgaGVyZSAqLworCQlvdXR3IChJMkNfQ09OX0VOIHwgSTJDX0NPTl9NU1QgfCBJMkNfQ09OX1NUVCB8IEkyQ19DT05fU1RQLAorCQkgICAgICBJMkNfQ09OKTsKKworCQlzdGF0dXMgPSB3YWl0X2Zvcl9waW4gKCk7CisJCWlmIChzdGF0dXMgJiBJMkNfU1RBVF9SUkRZKSB7CisJCQkqdmFsdWUgPSBpbncgKEkyQ19EQVRBKTsKKwkJCXVkZWxheSAoMjAwMDApOworCQl9IGVsc2UgeworCQkJaTJjX2Vycm9yID0gMTsKKwkJfQorCisJCWlmICghaTJjX2Vycm9yKSB7CisJCQlvdXR3IChJMkNfQ09OX0VOLCBJMkNfQ09OKTsKKwkJCXdoaWxlIChpbncgKEkyQ19TVEFUKQorCQkJICAgICAgIHx8IChpbncgKEkyQ19DT04pICYgSTJDX0NPTl9NU1QpKSB7CisJCQkJdWRlbGF5ICgxMDAwMCk7CisJCQkJb3V0dyAoMHhGRkZGLCBJMkNfU1RBVCk7CisJCQl9CisJCX0KKwl9CisJZmx1c2hfZmlmbygpOworCW91dHcgKDB4RkZGRiwgSTJDX1NUQVQpOworCW91dHcgKDAsIEkyQ19DTlQpOworCXJldHVybiBpMmNfZXJyb3I7Cit9CisKK3N0YXRpYyBpbnQgaTJjX3dyaXRlX2J5dGUgKHU4IGRldmFkZHIsIHU4IHJlZ29mZnNldCwgdTggdmFsdWUpCit7CisJaW50IGkyY19lcnJvciA9IDA7CisJdTE2IHN0YXR1cywgc3RhdDsKKworCS8qIHdhaXQgdW50aWwgYnVzIG5vdCBidXN5ICovCisJd2FpdF9mb3JfYmIgKCk7CisKKwkvKiB0d28gYnl0ZXMgKi8KKwlvdXR3ICgyLCBJMkNfQ05UKTsKKwkvKiBzZXQgc2xhdmUgYWRkcmVzcyAqLworCW91dHcgKGRldmFkZHIsIEkyQ19TQSk7CisJLyogc3RvcCBiaXQgbmVlZGVkIGhlcmUgKi8KKwlvdXR3IChJMkNfQ09OX0VOIHwgSTJDX0NPTl9NU1QgfCBJMkNfQ09OX1NUVCB8IEkyQ19DT05fVFJYIHwKKwkgICAgICBJMkNfQ09OX1NUUCwgSTJDX0NPTik7CisKKwkvKiB3YWl0IHVudGlsIHN0YXRlIGNoYW5nZSAqLworCXN0YXR1cyA9IHdhaXRfZm9yX3BpbiAoKTsKKworCWlmIChzdGF0dXMgJiBJMkNfU1RBVF9YUkRZKSB7CisJCS8qIHNlbmQgb3V0IHR3byBieXRlcyAqLworCQlvdXR3ICgodmFsdWUgPDwgOCkgKyByZWdvZmZzZXQsIEkyQ19EQVRBKTsKKwkJLyogbXVzdCBoYXZlIGVub3VnaCBkZWxheSB0byBhbGxvdyBCQiBiaXQgdG8gZ28gbG93ICovCisJCXVkZWxheSAoNTAwMDApOworCQlpZiAoaW53IChJMkNfU1RBVCkgJiBJMkNfU1RBVF9OQUNLKSB7CisJCQlpMmNfZXJyb3IgPSAxOworCQl9CisJfSBlbHNlIHsKKwkJaTJjX2Vycm9yID0gMTsKKwl9CisKKwlpZiAoIWkyY19lcnJvcikgeworCQlvdXR3IChJMkNfQ09OX0VOLCBJMkNfQ09OKTsKKwkJd2hpbGUgKChzdGF0ID0gaW53IChJMkNfU1RBVCkpIHx8IChpbncgKEkyQ19DT04pICYgSTJDX0NPTl9NU1QpKSB7CisJCQl1ZGVsYXkgKDEwMDApOworCQkJLyogaGF2ZSB0byByZWFkIHRvIGNsZWFyIGludHJydXB0ICovCisJCQlvdXR3ICgweEZGRkYsIEkyQ19TVEFUKTsKKwkJfQorCX0KKwlmbHVzaF9maWZvKCk7CisJb3V0dyAoMHhGRkZGLCBJMkNfU1RBVCk7CisJb3V0dyAoMCwgSTJDX0NOVCk7CisJcmV0dXJuIGkyY19lcnJvcjsKK30KKwordm9pZCBmbHVzaF9maWZvKHZvaWQpCit7CXUxNiBzdGF0OworCQorCS8qIG5vdGU6IGlmIHlvdSB0cnkgYW5kIHJlYWQgZGF0YSB3aGVuIGl0cyBub3QgdGhlcmUgb3IgcmVhZHkgCisgICAgICAgICAqIHlvdSBnZXQgYSBidXMgZXJyb3IKKyAgICAgICAgICovCisJd2hpbGUoMSl7CisJCXN0YXQgPSBpbncoSTJDX1NUQVQpOworCQlpZihzdGF0ID09IEkyQ19TVEFUX1JSRFkpeworCQkJaW53KEkyQ19EQVRBKTsKKwkJCW91dHcoSTJDX1NUQVRfUlJEWSxJMkNfU1RBVCk7CisJCQl1ZGVsYXkoMTAwMCk7CisJCX1lbHNlCisJCQlicmVhazsKKwl9Cit9CisKK2ludCBpMmNfcHJvYmUgKHVjaGFyIGNoaXApCit7CisJaW50IHJlcyA9IDE7IC8qIGRlZmF1bHQgPSBmYWlsICovCisKKwlpZiAoY2hpcCA9PSBpbncgKEkyQ19PQSkpIHsKKwkJcmV0dXJuIHJlczsKKwl9CisKKwkvKiB3YWl0IHVudGlsIGJ1cyBub3QgYnVzeSAqLworCXdhaXRfZm9yX2JiICgpOworCisJLyogdHJ5IHRvIHJlYWQgb25lIGJ5dGUgKi8KKwlvdXR3ICgxLCBJMkNfQ05UKTsKKwkvKiBzZXQgc2xhdmUgYWRkcmVzcyAqLworCW91dHcgKGNoaXAsIEkyQ19TQSk7CisJLyogc3RvcCBiaXQgbmVlZGVkIGhlcmUgKi8KKwlvdXR3IChJMkNfQ09OX0VOIHwgSTJDX0NPTl9NU1QgfCBJMkNfQ09OX1NUVCB8IEkyQ19DT05fU1RQLCBJMkNfQ09OKTsKKwkvKiBlbm91Z2ggZGVsYXkgZm9yIHRoZSBOQUNLIGJpdCBzZXQgKi8KKwl1ZGVsYXkgKDUwMDAwKTsKKworCWlmICghKGludyAoSTJDX1NUQVQpICYgSTJDX1NUQVRfTkFDSykpIHsKKwkJcmVzID0gMDsgICAgICAvKiBzdWNjZXNzIGNhc2UgKi8gCisJCWZsdXNoX2ZpZm8oKTsKKwkJb3V0dygweEZGRkYsIEkyQ19TVEFUKTsKKwl9IGVsc2UgeworCQlvdXR3KDB4RkZGRiwgSTJDX1NUQVQpOyAgLyogZmFpbHVlLCBjbGVhciBzb3VyY2VzKi8KKwkJb3V0dyAoaW53IChJMkNfQ09OKSB8IEkyQ19DT05fU1RQLCBJMkNfQ09OKTsgLyogZmluaXNoIHVwIHhmZXIgKi8KKwkJdWRlbGF5KDIwMDAwKTsKKwkJd2FpdF9mb3JfYmIgKCk7CisJfQorCWZsdXNoX2ZpZm8oKTsKKwlvdXR3ICgwLCBJMkNfQ05UKTsgLyogZG9uJ3QgYWxsb3cgYW55IG1vcmUgZGF0YSBpbi4uLndlIGRvbid0IHdhbnQgaXQuKi8KKwlvdXR3KDB4RkZGRiwgSTJDX1NUQVQpOworCXJldHVybiByZXM7Cit9CisKK2ludCBpMmNfcmVhZCAodWNoYXIgY2hpcCwgdWludCBhZGRyLCBpbnQgYWxlbiwgdWNoYXIgKiBidWZmZXIsIGludCBsZW4pCit7CisJaW50IGk7CisKKwlpZiAoYWxlbiA+IDEpIHsKKwkJcHJpbnRmICgiSTJDIHJlYWQ6IGFkZHIgbGVuICVkIG5vdCBzdXBwb3J0ZWRcbiIsIGFsZW4pOworCQlyZXR1cm4gMTsKKwl9CisKKwlpZiAoYWRkciArIGxlbiA+IDI1NikgeworCQlwcmludGYgKCJJMkMgcmVhZDogYWRkcmVzcyBvdXQgb2YgcmFuZ2VcbiIpOworCQlyZXR1cm4gMTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKwkJaWYgKGkyY19yZWFkX2J5dGUgKGNoaXAsIGFkZHIgKyBpLCAmYnVmZmVyW2ldKSkgeworCQkJcHJpbnRmICgiSTJDIHJlYWQ6IEkvTyBlcnJvclxuIik7CisJCQlpMmNfaW5pdCAoQ0ZHX0kyQ19TUEVFRCwgQ0ZHX0kyQ19TTEFWRSk7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitpbnQgaTJjX3dyaXRlICh1Y2hhciBjaGlwLCB1aW50IGFkZHIsIGludCBhbGVuLCB1Y2hhciAqIGJ1ZmZlciwgaW50IGxlbikKK3sKKwlpbnQgaTsKKworCWlmIChhbGVuID4gMSkgeworCQlwcmludGYgKCJJMkMgcmVhZDogYWRkciBsZW4gJWQgbm90IHN1cHBvcnRlZFxuIiwgYWxlbik7CisJCXJldHVybiAxOworCX0KKworCWlmIChhZGRyICsgbGVuID4gMjU2KSB7CisJCXByaW50ZiAoIkkyQyByZWFkOiBhZGRyZXNzIG91dCBvZiByYW5nZVxuIik7CisJCXJldHVybiAxOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgeworCQlpZiAoaTJjX3dyaXRlX2J5dGUgKGNoaXAsIGFkZHIgKyBpLCBidWZmZXJbaV0pKSB7CisJCQlwcmludGYgKCJJMkMgcmVhZDogSS9PIGVycm9yXG4iKTsKKwkJCWkyY19pbml0IChDRkdfSTJDX1NQRUVELCBDRkdfSTJDX1NMQVZFKTsKKwkJCXJldHVybiAxOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHdhaXRfZm9yX2JiICh2b2lkKQoreworCWludCB0aW1lb3V0ID0gMTA7CisJdTE2IHN0YXQ7CisKKwlvdXR3KDB4RkZGRiwgSTJDX1NUQVQpOyAgLyogY2xlYXIgY3VycmVudCBpbnRlcnJ1dHMuLi4qLworCXdoaWxlICgoc3RhdCA9IGludyAoSTJDX1NUQVQpICYgSTJDX1NUQVRfQkIpICYmIHRpbWVvdXQtLSkgeworCQlvdXR3IChzdGF0LCBJMkNfU1RBVCk7CisJCXVkZWxheSAoNTAwMDApOworCX0KKworCWlmICh0aW1lb3V0IDw9IDApIHsKKwkJcHJpbnRmICgidGltZWQgb3V0IGluIHdhaXRfZm9yX2JiOiBJMkNfU1RBVD0leFxuIiwKKwkJCWludyAoSTJDX1NUQVQpKTsKKwl9CisJb3V0dygweEZGRkYsIEkyQ19TVEFUKTsgIC8qIGNsZWFyIGRlbGF5ZWQgc3R1ZmYqLworfQorCitzdGF0aWMgdTE2IHdhaXRfZm9yX3BpbiAodm9pZCkKK3sKKwl1MTYgc3RhdHVzOworCWludCB0aW1lb3V0ID0gMTA7CisKKwlkbyB7CisJCXVkZWxheSAoMTAwMCk7CisJCXN0YXR1cyA9IGludyAoSTJDX1NUQVQpOworCX0gd2hpbGUgKCAgIShzdGF0dXMgJgorCQkgICAoSTJDX1NUQVRfUk9WUiB8IEkyQ19TVEFUX1hVREYgfCBJMkNfU1RBVF9YUkRZIHwKKwkJICAgIEkyQ19TVEFUX1JSRFkgfCBJMkNfU1RBVF9BUkRZIHwgSTJDX1NUQVRfTkFDSyB8CisJCSAgICBJMkNfU1RBVF9BTCkpICYmIHRpbWVvdXQtLSk7CisKKwlpZiAodGltZW91dCA8PSAwKSB7CisJCXByaW50ZiAoInRpbWVkIG91dCBpbiB3YWl0X2Zvcl9waW46IEkyQ19TVEFUPSV4XG4iLAorCQkJaW53IChJMkNfU1RBVCkpOworCQkJb3V0dygweEZGRkYsIEkyQ19TVEFUKTsJCit9CisJcmV0dXJuIHN0YXR1czsKK30KKworI2VuZGlmIC8qIENPTkZJR19EUklWRVJfT01BUDI0WFhfSTJDICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC5jIGIvZHJpdmVycy9zZXJpYWwuYwppbmRleCBmNWI1MWQ2Li5iMTNiMDVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsLmMKQEAgLTU5LDcgKzU5LDE0IEBACiAJCXJldHVybiAoMjYpOwkJLyogcmV0dXJuIDI2IGZvciBiYXNlIGRpdmlzb3IgKi8KIAl9CiAjZW5kaWYKLQlyZXR1cm4gKENGR19OUzE2NTUwX0NMSyAvIDE2IC8gZ2QtPmJhdWRyYXRlKTsKKworI2lmZGVmIENPTkZJR19BUFRJWAorI2RlZmluZSBNT0RFX1hfRElWIDEzCisjZWxzZQorI2RlZmluZSBNT0RFX1hfRElWIDE2CisjZW5kaWYKKwlyZXR1cm4gKENGR19OUzE2NTUwX0NMSyAvIE1PREVfWF9ESVYgLyBnZC0+YmF1ZHJhdGUpOworCiB9CiAKIGludCBzZXJpYWxfaW5pdCAodm9pZCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWFybTExMzYvYml0cy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXJtMTEzNi9iaXRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGMzMjczZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWFybTExMzYvYml0cy5oCkBAIC0wLDAgKzEsNDkgQEAKKy8qIGJpdHMuaAorICogQ29weXJpZ2h0IChjKSAyMDA0IFRleGFzIEluc3RydW1lbnRzCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7ICB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIGxpY2Vuc2UgZm91bmQgaW4gdGhlIGZpbGUKKyAqIG5hbWVkIENPUFlJTkcgdGhhdCBzaG91bGQgaGF2ZSBhY2NvbXBhbmllZCB0aGlzIGZpbGUuCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworI2lmbmRlZiBfX2JpdHNfaAorI2RlZmluZSBfX2JpdHNfaCAxCisKKyNkZWZpbmUgQklUMCAgKDE8PDApCisjZGVmaW5lIEJJVDEgICgxPDwxKQorI2RlZmluZSBCSVQyICAoMTw8MikKKyNkZWZpbmUgQklUMyAgKDE8PDMpCisjZGVmaW5lIEJJVDQgICgxPDw0KQorI2RlZmluZSBCSVQ1ICAoMTw8NSkKKyNkZWZpbmUgQklUNiAgKDE8PDYpCisjZGVmaW5lIEJJVDcgICgxPDw3KQorI2RlZmluZSBCSVQ4ICAoMTw8OCkKKyNkZWZpbmUgQklUOSAgKDE8PDkpCisjZGVmaW5lIEJJVDEwICgxPDwxMCkKKyNkZWZpbmUgQklUMTEgKDE8PDExKQorI2RlZmluZSBCSVQxMiAoMTw8MTIpCisjZGVmaW5lIEJJVDEzICgxPDwxMykKKyNkZWZpbmUgQklUMTQgKDE8PDE0KQorI2RlZmluZSBCSVQxNSAoMTw8MTUpCisjZGVmaW5lIEJJVDE2ICgxPDwxNikKKyNkZWZpbmUgQklUMTcgKDE8PDE3KQorI2RlZmluZSBCSVQxOCAoMTw8MTgpCisjZGVmaW5lIEJJVDE5ICgxPDwxOSkKKyNkZWZpbmUgQklUMjAgKDE8PDIwKQorI2RlZmluZSBCSVQyMSAoMTw8MjEpCisjZGVmaW5lIEJJVDIyICgxPDwyMikKKyNkZWZpbmUgQklUMjMgKDE8PDIzKQorI2RlZmluZSBCSVQyNCAoMTw8MjQpCisjZGVmaW5lIEJJVDI1ICgxPDwyNSkKKyNkZWZpbmUgQklUMjYgKDE8PDI2KQorI2RlZmluZSBCSVQyNyAoMTw8MjcpCisjZGVmaW5lIEJJVDI4ICgxPDwyOCkKKyNkZWZpbmUgQklUMjkgKDE8PDI5KQorI2RlZmluZSBCSVQzMCAoMTw8MzApCisjZGVmaW5lIEJJVDMxICgxPDwzMSkKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWFybTExMzYvY2xvY2tzLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hcm0xMTM2L2Nsb2Nrcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5NGZkY2YKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hcm0xMTM2L2Nsb2Nrcy5oCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDQKKyAqIFRleGFzIEluc3RydW1lbnRzLCA8d3d3LnRpLmNvbT4KKyAqIFJpY2hhcmQgV29vZHJ1ZmYgPHItd29vZHJ1ZmYyQHRpLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgL1BVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgICovCisjaWZuZGVmIF9PTUFQMjRYWF9DTE9DS1NfSF8KKyNkZWZpbmUgX09NQVAyNFhYX0NMT0NLU19IXworCisjZGVmaW5lIENPTU1JVF9ESVZJREVSUyAgMHgxCisKKyNkZWZpbmUgTU9ERV9CWVBBU1NfRkFTVCAweDIKKyNkZWZpbmUgQVBMTF9MT0NLICAgICAgICAweGMKKyNpZmRlZiBDT05GSUdfQVBUSVgKKyNkZWZpbmUgRFBMTF9MT0NLICAgICAgICAweDEgICAvKiBzdGF5IGluIGJ5cGFzcyBtb2RlICovCisjZWxzZQorI2RlZmluZSBEUExMX0xPQ0sgICAgICAgIDB4MyAgIC8qIERQTEwgbG9jayAqLworI2VuZGlmCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqOworOyBQUkNNIFNjaGVtZSBJSQorOworOyBFbmFibGUgY2xvY2tzIGFuZCBEUExMIGZvcjoKKzsgIERQTEw9MzAwLCAJRFBMTG91dD02MDAgICAJTT0xLE49NTAgICBDTV9DTEtTRUwxX1BMTFsyMTo4XSAgMTIvMio1MAorOyAgQ29yZT02MDAgIAkoY29yZSBkb21haW4pICAgRFBMTHgyICAgICBDTV9DTEtTRUwyX1BMTFsxOjBdCis7ICBNUFVGPTMwMCAgIAkobXB1IGRvbWFpbikgICAgMiAgICAgICAgICBDTV9DTEtTRUxfTVBVWzQ6MF0KKzsgIERTUEY9MjAwICAgIChkc3AgZG9tYWluKSAgICAzICAgICAgICAgIENNX0NMS1NFTF9EU1BbNDowXQorOyAgRFNQST0xMDAgICAgICAgICAgICAgICAgICAgIDYgICAgICAgICAgQ01fQ0xLU0VMX0RTUFs2OjVdCis7ICBEU1BfUyAgICAgICAgICBieXBhc3MJICAgICAgICAgICAgICAgQ01fQ0xLU0VMX0RTUFs3XQorOyAgSVZBRj0yMDAgICAgKGRzcCBkb21haW4pICAgIDMgICAgICAgICAgQ01fQ0xLU0VMX0RTUFsxMjo4XQorOyAgSVZBRj0xMDAgICAgICAgIGF1dG8KKzsgIElWQUkgICAgICAgICAgICBhdXRvCis7ICBJVkFfTVBVICAgICAgICAgYXV0bworOyAgSVZBX1MgICAgICAgICAgYnlwYXNzICAgICAgICAgICAgICAgICAgQ01fQ0xLU0VMX0RTUFsxM10KKzsgIEdGWEY9NTAgICAgICAoZ2Z4IGRvbWFpbikJMTIgICAgICAgICBDTV9DTEtTRUxfRkdYWzI6MF0KKzsgIFNTSV9TU1JGPTIwMCAgICAgICAgICAgICAgICAgMyAgICAgICAgIENNX0NMS1NFTDFfQ09SRVsyNDoyMF0KKzsgIFNTSV9TU1RGPTEwMCAgICAgYXV0bworOyAgTDM9MTAwTWh6IChzZHJhbSkgICAgICAgICAgICA2ICAgICAgICAgQ01fQ0xLU0VMMV9DT1JFWzQ6MF0KKzsgIEw0PTEwME1oeiAgICAgICAgICAgICAgICAgICAgNgorOyAgQ19MNF9VU0I9NTAgICAgICAgICAgICAgICAgIDEyICAgICAgICAgQ01fQ0xLU0VMMV9DT1JFWzY6NV0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgSUlfRFBMTF9PVVRfWDIgICAweDIgICAgLyogeDIgY29yZSBvdXQgKi8KKyNkZWZpbmUgSUlfTVBVX0RJViAgICAgICAweDIgICAgLyogbXB1ID0gY29yZS8yICovCisjZGVmaW5lIElJX0RTUF9ESVYgICAgICAgMHgzNDMgIC8qIGRzcCAmIGl2YSBkaXZpZGVyICovCisjZGVmaW5lIElJX0dGWF9ESVYgICAgICAgMHgyCisjZGVmaW5lIElJX0JVU19ESVYgICAgICAgMHgwNDYwMEMyNgorI2RlZmluZSBJSV9CVVNfRElWX0VTMSAgIDB4MDQ2MDEwMjYKKyNkZWZpbmUgSUlfRFBMTF8zMDAgICAgICAweDAxODMyMTAwCisKKy8qIHNldCBkZWZhdWx0cyBmb3IgYm9vdCB1cCAqLworI2lmZGVmIFBSQ01fQ09ORklHX0lJCisjZGVmaW5lIERQTExfT1VUICAgICAgICAgSUlfRFBMTF9PVVRfWDIKKyNkZWZpbmUgTVBVX0RJViAgICAgICAgICBJSV9NUFVfRElWCisjZGVmaW5lIERTUF9ESVYgICAgICAgICAgSUlfRFNQX0RJVgorI2RlZmluZSBHRlhfRElWICAgICAgICAgIElJX0dGWF9ESVYKKyNkZWZpbmUgQlVTX0RJViAgICAgICAgICBJSV9CVVNfRElWCisjZGVmaW5lIEJVU19ESVZfRVMxICAgICAgSUlfQlVTX0RJVl9FUzEKKyNkZWZpbmUgRFBMTF9WQUwgICAgICAgICBJSV9EUExMXzMwMAorI2VuZGlmCisKKy8qIGxvY2sgZGVsYXkgdGltZSBvdXQgKi8KKyNkZWZpbmUgTERFTEFZICAgICAgICAgICAxMjAwMDAwMAorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXJtMTEzNi9pMmMuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWFybTExMzYvaTJjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2UzN2Y0ZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWFybTExMzYvaTJjLmgKQEAgLTAsMCArMSwxMDYgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDQKKyAqIFRleGFzIEluc3RydW1lbnRzLCA8d3d3LnRpLmNvbT4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworI2lmbmRlZiBfT01BUDI0WFhfSTJDX0hfCisjZGVmaW5lIF9PTUFQMjRYWF9JMkNfSF8KKworI2RlZmluZSBJMkNfQkFTRSAgICAgICAgICAgICAgICAweDQ4MDcwMDAwCisjZGVmaW5lIEkyQ19CQVNFMiAgICAgICAgICAgICAgIDB4NDgwNzIwMDAgLyogbm90aGluZyBob29rZWQgdXAgb24gaDQgKi8KKworI2RlZmluZSBJMkNfUkVWICAgICAgICAgICAgICAgICAoSTJDX0JBU0UgKyAweDAwKQorI2RlZmluZSBJMkNfSUUgICAgICAgICAgICAgICAgICAoSTJDX0JBU0UgKyAweDA0KQorI2RlZmluZSBJMkNfU1RBVCAgICAgICAgICAgICAgICAoSTJDX0JBU0UgKyAweDA4KQorI2RlZmluZSBJMkNfSVYgICAgICAgICAgICAgICAgICAoSTJDX0JBU0UgKyAweDBjKQorI2RlZmluZSBJMkNfQlVGICAgICAgICAgICAgICAgICAoSTJDX0JBU0UgKyAweDE0KQorI2RlZmluZSBJMkNfQ05UICAgICAgICAgICAgICAgICAoSTJDX0JBU0UgKyAweDE4KQorI2RlZmluZSBJMkNfREFUQSAgICAgICAgICAgICAgICAoSTJDX0JBU0UgKyAweDFjKQorI2RlZmluZSBJMkNfQ09OICAgICAgICAgICAgICAgICAoSTJDX0JBU0UgKyAweDI0KQorI2RlZmluZSBJMkNfT0EgICAgICAgICAgICAgICAgICAoSTJDX0JBU0UgKyAweDI4KQorI2RlZmluZSBJMkNfU0EgICAgICAgICAgICAgICAgICAoSTJDX0JBU0UgKyAweDJjKQorI2RlZmluZSBJMkNfUFNDICAgICAgICAgICAgICAgICAoSTJDX0JBU0UgKyAweDMwKQorI2RlZmluZSBJMkNfU0NMTCAgICAgICAgICAgICAgICAoSTJDX0JBU0UgKyAweDM0KQorI2RlZmluZSBJMkNfU0NMSCAgICAgICAgICAgICAgICAoSTJDX0JBU0UgKyAweDM4KQorI2RlZmluZSBJMkNfU1lTVEVTVCAgICAgICAgICAgICAoSTJDX0JBU0UgKyAweDNjKQorCisvKiBJMkMgbWFza3MgKi8KKworLyogSTJDIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKEkyQ19JRSk6ICovCisjZGVmaW5lIEkyQ19JRV9HQ19JRSAgICAoMSA8PCA1KQorI2RlZmluZSBJMkNfSUVfWFJEWV9JRSAgKDEgPDwgNCkgICAgICAgIC8qIFRyYW5zbWl0IGRhdGEgcmVhZHkgaW50ZXJydXB0IGVuYWJsZSAqLworI2RlZmluZSBJMkNfSUVfUlJEWV9JRSAgKDEgPDwgMykgICAgICAgIC8qIFJlY2VpdmUgZGF0YSByZWFkeSBpbnRlcnJ1cHQgZW5hYmxlICovCisjZGVmaW5lIEkyQ19JRV9BUkRZX0lFICAoMSA8PCAyKSAgICAgICAgLyogUmVnaXN0ZXIgYWNjZXNzIHJlYWR5IGludGVycnVwdCBlbmFibGUgKi8KKyNkZWZpbmUgSTJDX0lFX05BQ0tfSUUgICgxIDw8IDEpICAgICAgICAvKiBObyBhY2tub3dsZWRnbWVudCBpbnRlcnJ1cHQgZW5hYmxlICovCisjZGVmaW5lIEkyQ19JRV9BTF9JRSAgICAoMSA8PCAwKSAgICAgICAgLyogQXJiaXRyYXRpb24gbG9zdCBpbnRlcnJ1cHQgZW5hYmxlICovCisKKy8qIEkyQyBTdGF0dXMgUmVnaXN0ZXIgKEkyQ19TVEFUKTogKi8KKworI2RlZmluZSBJMkNfU1RBVF9TQkQgICAgKDEgPDwgMTUpICAgICAgIC8qIFNpbmdsZSBieXRlIGRhdGEgKi8KKyNkZWZpbmUgSTJDX1NUQVRfQkIgICAgICgxIDw8IDEyKSAgICAgICAvKiBCdXMgYnVzeSAqLworI2RlZmluZSBJMkNfU1RBVF9ST1ZSICAgKDEgPDwgMTEpICAgICAgIC8qIFJlY2VpdmUgb3ZlcnJ1biAqLworI2RlZmluZSBJMkNfU1RBVF9YVURGICAgKDEgPDwgMTApICAgICAgIC8qIFRyYW5zbWl0IHVuZGVyZmxvdyAqLworI2RlZmluZSBJMkNfU1RBVF9BQVMgICAgKDEgPDwgOSkgICAgICAgIC8qIEFkZHJlc3MgYXMgc2xhdmUgKi8KKyNkZWZpbmUgSTJDX1NUQVRfR0MgICAgICgxIDw8IDUpCisjZGVmaW5lIEkyQ19TVEFUX1hSRFkgICAoMSA8PCA0KSAgICAgICAgLyogVHJhbnNtaXQgZGF0YSByZWFkeSAqLworI2RlZmluZSBJMkNfU1RBVF9SUkRZICAgKDEgPDwgMykgICAgICAgIC8qIFJlY2VpdmUgZGF0YSByZWFkeSAqLworI2RlZmluZSBJMkNfU1RBVF9BUkRZICAgKDEgPDwgMikgICAgICAgIC8qIFJlZ2lzdGVyIGFjY2VzcyByZWFkeSAqLworI2RlZmluZSBJMkNfU1RBVF9OQUNLICAgKDEgPDwgMSkgICAgICAgIC8qIE5vIGFja25vd2xlZGdtZW50IGludGVycnVwdCBlbmFibGUgKi8KKyNkZWZpbmUgSTJDX1NUQVRfQUwgICAgICgxIDw8IDApICAgICAgICAvKiBBcmJpdHJhdGlvbiBsb3N0IGludGVycnVwdCBlbmFibGUgKi8KKworCisvKiBJMkMgSW50ZXJydXB0IENvZGUgUmVnaXN0ZXIgKEkyQ19JTlRDT0RFKTogKi8KKworI2RlZmluZSBJMkNfSU5UQ09ERV9NQVNLICAgICAgICA3CisjZGVmaW5lIEkyQ19JTlRDT0RFX05PTkUgICAgICAgIDAKKyNkZWZpbmUgSTJDX0lOVENPREVfQUwgICAgICAgICAgMSAgICAgICAvKiBBcmJpdHJhdGlvbiBsb3N0ICovCisjZGVmaW5lIEkyQ19JTlRDT0RFX05BSyAgICAgICAgIDIgICAgICAgLyogTm8gYWNrbm93bGVkZ2VtZW50L2dlbmVyYWwgY2FsbCAqLworI2RlZmluZSBJMkNfSU5UQ09ERV9BUkRZICAgICAgICAzICAgICAgIC8qIFJlZ2lzdGVyIGFjY2VzcyByZWFkeSAqLworI2RlZmluZSBJMkNfSU5UQ09ERV9SUkRZICAgICAgICA0ICAgICAgIC8qIFJjdiBkYXRhIHJlYWR5ICovCisjZGVmaW5lIEkyQ19JTlRDT0RFX1hSRFkgICAgICAgIDUgICAgICAgLyogWG1pdCBkYXRhIHJlYWR5ICovCisKKy8qIEkyQyBCdWZmZXIgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAoSTJDX0JVRik6ICovCisKKyNkZWZpbmUgSTJDX0JVRl9SRE1BX0VOICAgICAgICAgKDEgPDwgMTUpICAgICAgIC8qIFJlY2VpdmUgRE1BIGNoYW5uZWwgZW5hYmxlICovCisjZGVmaW5lIEkyQ19CVUZfWERNQV9FTiAgICAgICAgICgxIDw8IDcpICAgICAgICAvKiBUcmFuc21pdCBETUEgY2hhbm5lbCBlbmFibGUgKi8KKworLyogSTJDIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKEkyQ19DT04pOiAqLworCisjZGVmaW5lIEkyQ19DT05fRU4gICAgICAoMSA8PCAxNSkgICAgICAgLyogSTJDIG1vZHVsZSBlbmFibGUgKi8KKyNkZWZpbmUgSTJDX0NPTl9CRSAgICAgICgxIDw8IDE0KSAgICAgICAvKiBCaWcgZW5kaWFuIG1vZGUgKi8KKyNkZWZpbmUgSTJDX0NPTl9TVEIgICAgICgxIDw8IDExKSAgICAgICAvKiBTdGFydCBieXRlIG1vZGUgKG1hc3RlciBtb2RlIG9ubHkpICovCisjZGVmaW5lIEkyQ19DT05fTVNUICAgICAoMSA8PCAxMCkgICAgICAgLyogTWFzdGVyL3NsYXZlIG1vZGUgKi8KKyNkZWZpbmUgSTJDX0NPTl9UUlggICAgICgxIDw8IDkpICAgICAgICAvKiBUcmFuc21pdHRlci9yZWNlaXZlciBtb2RlIChtYXN0ZXIgbW9kZSBvbmx5KSAqLworI2RlZmluZSBJMkNfQ09OX1hBICAgICAgKDEgPDwgOCkgICAgICAgIC8qIEV4cGFuZCBhZGRyZXNzICovCisjZGVmaW5lIEkyQ19DT05fU1RQICAgICAoMSA8PCAxKSAgICAgICAgLyogU3RvcCBjb25kaXRpb24gKG1hc3RlciBtb2RlIG9ubHkpICovCisjZGVmaW5lIEkyQ19DT05fU1RUICAgICAoMSA8PCAwKSAgICAgICAgLyogU3RhcnQgY29uZGl0aW9uIChtYXN0ZXIgbW9kZSBvbmx5KSAqLworCisvKiBJMkMgU3lzdGVtIFRlc3QgUmVnaXN0ZXIgKEkyQ19TWVNURVNUKTogKi8KKworI2RlZmluZSBJMkNfU1lTVEVTVF9TVF9FTiAgICAgICAoMSA8PCAxNSkgICAgICAgLyogU3lzdGVtIHRlc3QgZW5hYmxlICovCisjZGVmaW5lIEkyQ19TWVNURVNUX0ZSRUUgICAgICAgICgxIDw8IDE0KSAgICAgICAvKiBGcmVlIHJ1bm5pbmcgbW9kZSAob24gYnJlYWtwb2ludCkgKi8KKyNkZWZpbmUgSTJDX1NZU1RFU1RfVE1PREVfTUFTSyAgKDMgPDwgMTIpICAgICAgIC8qIFRlc3QgbW9kZSBzZWxlY3QgKi8KKyNkZWZpbmUgSTJDX1NZU1RFU1RfVE1PREVfU0hJRlQgKDEyKSAgICAgICAgICAgIC8qIFRlc3QgbW9kZSBzZWxlY3QgKi8KKyNkZWZpbmUgSTJDX1NZU1RFU1RfU0NMX0kgICAgICAgKDEgPDwgMykgICAgICAgIC8qIFNDTCBsaW5lIHNlbnNlIGlucHV0IHZhbHVlICovCisjZGVmaW5lIEkyQ19TWVNURVNUX1NDTF9PICAgICAgICgxIDw8IDIpICAgICAgICAvKiBTQ0wgbGluZSBkcml2ZSBvdXRwdXQgdmFsdWUgKi8KKyNkZWZpbmUgSTJDX1NZU1RFU1RfU0RBX0kgICAgICAgKDEgPDwgMSkgICAgICAgIC8qIFNEQSBsaW5lIHNlbnNlIGlucHV0IHZhbHVlICovCisjZGVmaW5lIEkyQ19TWVNURVNUX1NEQV9PICAgICAgICgxIDw8IDApICAgICAgICAvKiBTREEgbGluZSBkcml2ZSBvdXRwdXQgdmFsdWUgKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hcm0xMTM2L21lbS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXJtMTEzNi9tZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDZmZDUwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXJtMTEzNi9tZW0uaApAQCAtMCwwICsxLDExOSBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwNAorICogVGV4YXMgSW5zdHJ1bWVudHMsIDx3d3cudGkuY29tPgorICogUmljaGFyZCBXb29kcnVmZiA8ci13b29kcnVmZjJAdGkuY29tPgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpZm5kZWYgX09NQVAyNFhYX01FTV9IXworI2RlZmluZSBfT01BUDI0WFhfTUVNX0hfCisKKyNkZWZpbmUgU0RSQ19DUzBfT1NFVCAgICAweDAKKyNkZWZpbmUgU0RSQ19DUzFfT1NFVCAgICAweDMwICAvKiBtaXJyb3IgQ1MxIHJlZ3MgYXBwZWFyIG9mZnNldCAweDMwIGZyb20gQ1MwICovCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisvKiBzdHJ1Y3QncyBmb3IgaG9sZGluZyBkYXRhIHRhYmxlcyBmb3IgY3VycmVudCBib2FyZHMsIHRoZXkgYXJlIGdldHRpbmcgdXNlZAorICAgZWFybHkgaW4gaW5pdCB3aGVuIE5PIGdsb2JhbCBhY2Nlc3MgYXJlIHRoZXJlICovCitzdHJ1Y3Qgc2RyY19kYXRhX3MgeworCXUzMiAgICBzZHJjX3NoYXJpbmc7CisJdTMyICAgIHNkcmNfbWRjZmdfMDsKKwl1MzIgICAgc2RyY19hY3RpbV9jdHJsYV8wOworCXUzMiAgICBzZHJjX2FjdGltX2N0cmxiXzA7CisJdTMyICAgIHNkcmNfcmZyX2N0cmw7CisJdTMyICAgIHNkcmNfbXJfMDsKKwl1MzIgICAgc2RyY19kbGxhX2N0cmw7CisJdTMyICAgIHNkcmNfZGxsYl9jdHJsOworfSAvKl9fYXR0cmlidXRlX18gKChwYWNrZWQpKSovOwordHlwZWRlZiBzdHJ1Y3Qgc2RyY19kYXRhX3Mgc2RyY19kYXRhX3Q7CisjZW5kaWYKKworLyogU2xvd2VyIGZ1bGwgZnJlcXVlbmN5IHJhbmdlIGRlZmF1bHQgdGltaW5ncyBmb3IgeDMyIG9wZXJhdGlvbiovCisjZGVmaW5lIEg0XzI0MjBfU0RSQ19TSEFSSU5HICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBINF8yNDIwX1NEUkNfTURDRkdfMCAgICAgICAgICAgICAgIDB4MDE3MDIwMTEKKyNkZWZpbmUgSDRfMjQyMF9TRFJDX0FDVElNX0NUUkxBXzAgICAgICAgICAweDliZWFkOTA5CisjZGVmaW5lIEg0XzI0MjBfU0RSQ19BQ1RJTV9DVFJMQl8wICAgICAgICAgMHgwMDAwMDAxNAorI2RlZmluZSBINF8yNDIwX1NEUkNfUkZSX0NUUkxfRVMxICAgICAgICAgIDB4MDAwMDI0MDEKKyNkZWZpbmUgSDRfMjQyMF9TRFJDX1JGUl9DVFJMICAgICAgICAgICAgICAweDAwMDJkYTAxCisjZGVmaW5lIEg0XzI0MjBfU0RSQ19NUl8wICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMgorI2RlZmluZSBINF8yNDIwX1NEUkNfRExMQV9DVFJMICAgICAgICAgICAgIDB4MDAwMDczMDcKKyNkZWZpbmUgSDRfMjQyMF9TRFJDX0RMTEJfQ1RSTCAgICAgICAgICAgICAweDAwMDA3MzA3CisKKyNkZWZpbmUgSDRfMjQyMl9TRFJDX1NIQVJJTkcgICAgICAgICAgICAgICAweDAwMDA0YjAwCisjZGVmaW5lIEg0XzI0MjJfU0RSQ19NRENGR18wICAgICAgICAgICAgICAgMHgwMDgwMTAxMQorI2RlZmluZSBINF8yNDIyX1NEUkNfQUNUSU1fQ1RSTEFfMCAgICAgICAgIDB4OUJFQUQ5MDkKKyNkZWZpbmUgSDRfMjQyMl9TRFJDX0FDVElNX0NUUkxCXzAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEg0XzI0MjJfU0RSQ19SRlJfQ1RSTF9FUzEgICAgICAgICAgMHgwMDAwMjQwMQorI2RlZmluZSBINF8yNDIyX1NEUkNfUkZSX0NUUkwgICAgICAgICAgICAgIDB4MDAwMmRhMDMKKyNkZWZpbmUgSDRfMjQyMl9TRFJDX01SXzAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMyCisjZGVmaW5lIEg0XzI0MjJfU0RSQ19ETExBX0NUUkwgICAgICAgICAgICAgMHgwMDAwNzMwNworI2RlZmluZSBINF8yNDIyX1NEUkNfRExMQl9DVFJMICAgICAgICAgICAgIDB4MDAwMDczMDcKKworI2RlZmluZSBINF8yNDIwX0NPTUJPX01EQ0ZHXzAgICAgICAgICAgICAgIDB4MDA4MDEwMTEKKworLyogb3B0aW1pemVkIHRpbWluZ3MgKi8KKyNkZWZpbmUgSDRfMjQyMF9TRFJDX0FDVElNX0NUUkxBXzBfMTAwTUh6ICAweDVBNTlCNDg1CisjZGVmaW5lIEg0XzI0MjBfU0RSQ19BQ1RJTV9DVFJMQl8wXzEwME1IeiAgMHgwMDAwMDAwZQorCisKKyNpZmRlZiBQUkNNX0NPTkZJR19JSSAgICAgICAgLyogTDMgYXQgMTAwTUh6ICovCisjZGVmaW5lIEg0XzI0WFhfR1BNQ19DT05GSUcxXzAgICAweDMKKyNkZWZpbmUgSDRfMjRYWF9HUE1DX0NPTkZJRzJfMCAgIDB4MDAxZjFmMDEKKyNkZWZpbmUgSDRfMjRYWF9HUE1DX0NPTkZJRzNfMCAgIDB4MDAwMzAzMDEKKyNkZWZpbmUgSDRfMjRYWF9HUE1DX0NPTkZJRzRfMCAgIDB4MEMwMzBDMDMKKyNkZWZpbmUgSDRfMjRYWF9HUE1DX0NPTkZJRzVfMCAgIDB4MDExMzFGMUYKKyNkZWZpbmUgSDRfMjRYWF9HUE1DX0NPTkZJRzdfMCAgICgweDAwMDAwQzQwfChINF9DUzBfQkFTRSA+PiAyNCkpCisKKyNkZWZpbmUgSDRfMjRYWF9HUE1DX0NPTkZJRzFfMSAgIDB4MDAwMTEwMDAKKyNkZWZpbmUgSDRfMjRYWF9HUE1DX0NPTkZJRzJfMSAgIDB4MDAxRjFGMDAKKyNkZWZpbmUgSDRfMjRYWF9HUE1DX0NPTkZJRzNfMSAgIDB4MDAwODA4MDIKKyNkZWZpbmUgSDRfMjRYWF9HUE1DX0NPTkZJRzRfMSAgIDB4MUMwOTFDMDkKKyNkZWZpbmUgSDRfMjRYWF9HUE1DX0NPTkZJRzVfMSAgIDB4MDMxQTFGMUYKKyNkZWZpbmUgSDRfMjRYWF9HUE1DX0NPTkZJRzZfMSAgIDB4MDAwMDAzQzIKKyNkZWZpbmUgSDRfMjRYWF9HUE1DX0NPTkZJRzdfMSAgICgweDAwMDAwRjQwfChINF9DUzFfQkFTRSA+PiAyNCkpCisjZW5kaWYKKworI2lmZGVmIFBSQ01fQ09ORklHX0lJSSAgLyogTDMgYXQgMTMzTUh6ICovCisjZGVmaW5lIEg0XzI0WFhfR1BNQ19DT05GSUcxXzAgICAweDMKKyNkZWZpbmUgSDRfMjRYWF9HUE1DX0NPTkZJRzJfMCAgIDB4MDAxZjFmMDEKKyNkZWZpbmUgSDRfMjRYWF9HUE1DX0NPTkZJRzNfMCAgIDB4MDAxRjFGMDAKKyNkZWZpbmUgSDRfMjRYWF9HUE1DX0NPTkZJRzRfMCAgIDB4MTYwNjE2MDYKKyNkZWZpbmUgSDRfMjRYWF9HUE1DX0NPTkZJRzVfMCAgIDB4MDExMzFGMUYKKyNkZWZpbmUgSDRfMjRYWF9HUE1DX0NPTkZJRzdfMCAgICgweDAwMDAwQzQwfChINF9DUzBfQkFTRSA+PiAyNCkpCisKKyNkZWZpbmUgSDRfMjRYWF9HUE1DX0NPTkZJRzFfMSAgIDB4MDAwMTEwMDAKKyNkZWZpbmUgSDRfMjRYWF9HUE1DX0NPTkZJRzJfMSAgIDB4MDAxZjFmMDEKKyNkZWZpbmUgSDRfMjRYWF9HUE1DX0NPTkZJRzNfMSAgIDB4MDAxRjFGMDAKKyNkZWZpbmUgSDRfMjRYWF9HUE1DX0NPTkZJRzRfMSAgIDB4MUEwNjFBMDYKKyNkZWZpbmUgSDRfMjRYWF9HUE1DX0NPTkZJRzVfMSAgIDB4MDQxRjFGMUYKKyNkZWZpbmUgSDRfMjRYWF9HUE1DX0NPTkZJRzZfMSAgIDB4MDAwMDA0QzQKKyNkZWZpbmUgSDRfMjRYWF9HUE1DX0NPTkZJRzdfMSAgICgweDAwMDAwRjQwfChINF9DUzFfQkFTRSA+PiAyNCkpCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19BUFRJWCAvKiBTRFJDLVNEUiBmb3IgQXB0aXggeDE2ICovCisjZGVmaW5lIFZBTF9INF9TRFJDX1NIQVJJTkdfMTYgICAweDAwMDAyNDAwICAvKiBOby1UcmlzdGF0ZSwgMTZiaXQgb24gRDMxLUQxNiwgQ1MxPWRvbnQgY2FyZSAqLworI2RlZmluZSBWQUxfSDRfU0RSQ19TSEFSSU5HICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBWQUxfSDRfU0RSQ19NQ0ZHXzBfMTYgICAgMHgwMDkwMTAwMCAgLyogU0RSLVNEUkFNLEV4dGVybmFsLHgxNiBiaXQgKi8KKyNkZWZpbmUgVkFMX0g0X1NEUkNfTUNGR18wICAgICAgIDB4MDE3MDIwMTEKKyNkZWZpbmUgVkFMX0g0X1NEUkNfTVJfMCAgICAgICAgIDB4MDAwMDAwMjkgIC8qIEJ1cnN0PTIsIFNlcmlhbCBNb2RlLCBDQVMgMyovCisjZGVmaW5lIFZBTF9INF9TRFJDX1JGUl9DVFJMXzAgICAweDAwMDAxNzAzICAvKiByZWZyZXNoIHRpbWUgKi8KKyNkZWZpbmUgVkFMX0g0X1NEUkNfRENETDJfQ1RSTCAgIDB4NUE1OUI0ODUKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWFybTExMzYvbXV4LmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hcm0xMTM2L211eC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3Yzg0MTkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hcm0xMTM2L211eC5oCkBAIC0wLDAgKzEsMTU4IEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDA0CisgKiBUZXhhcyBJbnN0cnVtZW50cywgPHd3dy50aS5jb20+CisgKiBSaWNoYXJkIFdvb2RydWZmIDxyLXdvb2RydWZmMkB0aS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKyNpZm5kZWYgX09NQVAyNDIwX01VWF9IXworI2RlZmluZSBfT01BUDI0MjBfTVVYX0hfCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCit0eXBlZGVmICB1bnNpZ25lZCBjaGFyIHVpbnQ4OwordHlwZWRlZiAgdW5zaWduZWQgaW50IHVpbnQzMjsKKwordm9pZCBtdXhTZXR1cFNEUkModm9pZCk7Cit2b2lkIG11eFNldHVwR1BNQyh2b2lkKTsKK3ZvaWQgbXV4U2V0dXBVc2IwKHZvaWQpOwordm9pZCBtdXhTZXR1cFVhcnQzKHZvaWQpOwordm9pZCBtdXhTZXR1cEkyQzEodm9pZCk7Cit2b2lkIG11eFNldHVwVUFSVDEodm9pZCk7Cit2b2lkIG11eFNldHVwTENEKHZvaWQpOwordm9pZCBtdXhTZXR1cENhbWVyYSh2b2lkKTsKK3ZvaWQgbXV4U2V0dXBNTUNTRCh2b2lkKSA7Cit2b2lkIG11eFNldHVwVG91Y2hTY3JlZW4odm9pZCkgOwordm9pZCBtdXhTZXR1cEhEUSh2b2lkKTsKKyNlbmRpZgorCisjZGVmaW5lIFVTQl9PVEdfQ1RSTAkJCSAgICAgICAgKCh2b2xhdGlsZSB1aW50MzIgKikweDQ4MDVFMzBDKQorCisvKiBQaW4gTXV4aW5nIHJlZ2lzdGVycyB1c2VkIGZvciBIRFEgKFNtYXJ0IGJhdHRlcnkpICovCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9IRFFfU0lPICAgICAgICAgKCh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopMHg0ODAwMDExNSkKKworLyogUGluIE11eGluZyByZWdpc3RlcnMgdXNlZCBmb3IgR1BNQyAqLworI2RlZmluZSBDT05UUk9MX1BBRENPTkZfR1BNQ19EMl9CWVRFMAkoKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikweDQ4MDAwMDg4KQorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfR1BNQ19EMl9CWVRFMQkoKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikweDQ4MDAwMDg5KQorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfR1BNQ19EMl9CWVRFMgkoKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikweDQ4MDAwMDhBKQorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfR1BNQ19EMl9CWVRFMwkoKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikweDQ4MDAwMDhCKQorCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9HUE1DX05DUzBfQllURTAJKCh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopMHg0ODAwMDA4QykKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX0dQTUNfTkNTMF9CWVRFMQkoKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikweDQ4MDAwMDhEKQorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfR1BNQ19OQ1MwX0JZVEUyCSgodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKTB4NDgwMDAwOEUpCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9HUE1DX05DUzBfQllURTMJKCh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopMHg0ODAwMDA4RikKKworLyogUGluIE11eGluZyByZWdpc3RlcnMgdXNlZCBmb3IgU0RSQyAqLworI2RlZmluZSBDT05UUk9MX1BBRENPTkZfU0RSQ19OQ1MwX0JZVEUwICgodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKTB4NDgwMDAwQTApCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9TRFJDX05DUzBfQllURTEgKCh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopMHg0ODAwMDBBMSkKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX1NEUkNfTkNTMF9CWVRFMiAoKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikweDQ4MDAwMEEyKQorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfU0RSQ19OQ1MwX0JZVEUzICgodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKTB4NDgwMDAwQTMpCisKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX1NEUkNfQTE0X0JZVEUwCSgodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKTB4NDgwMDAwMzApCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9TRFJDX0ExNF9CWVRFMQkoKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikweDQ4MDAwMDMxKQorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfU0RSQ19BMTRfQllURTIJKCh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopMHg0ODAwMDAzMikKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX1NEUkNfQTE0X0JZVEUzCSgodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKTB4NDgwMDAwMzMpCisKKy8qIFBpbiBNdXhpbmcgcmVnaXN0ZXJzIHVzZWQgZm9yIFRvdWNoIFNjcmVlbiAoU1BJKSAqLworI2RlZmluZSBDT05UUk9MX1BBRENPTkZfU1BJMV9DTEsgICAgICAgICgodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKTB4NDgwMDAwRkYpCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9TUEkxX1NJTU8gICAgICAgKCh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopMHg0ODAwMDEwMCkKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX1NQSTFfU09NSSAgICAgICAoKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikweDQ4MDAwMTAxKQorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfU1BJMV9OQ1MwICAgICAgICgodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKTB4NDgwMDAxMDIpCisKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX01DQlNQMV9GU1IgICAgICAoKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikweDQ4MDAwMTBCKQorCisvKiBQaW4gTXV4aW5nIHJlZ2lzdGVycyB1c2VkIGZvciBNTUNTRCAqLworI2RlZmluZSBDT05UUk9MX1BBRENPTkZfTU1DX0NMS0kgICAgICAgICgodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKTB4NDgwMDAwRkUpCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9NTUNfQ0xLTyAgICAgICAgKCh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopMHg0ODAwMDBGMykKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX01NQ19DTUQgICAgICAgICAoKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikweDQ4MDAwMEY0KQorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfTU1DX0RBVDAgICAgICAgICgodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKTB4NDgwMDAwRjUpCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9NTUNfREFUMSAgICAgICAgKCh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopMHg0ODAwMDBGNikKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX01NQ19EQVQyICAgICAgICAoKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikweDQ4MDAwMEY3KQorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfTU1DX0RBVDMgICAgICAgICgodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKTB4NDgwMDAwRjgpCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9NTUNfREFUX0RJUjAgICAgKCh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopMHg0ODAwMDBGOSkKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX01NQ19EQVRfRElSMSAgICAoKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikweDQ4MDAwMEZBKQorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfTU1DX0RBVF9ESVIyICAgICgodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKTB4NDgwMDAwRkIpCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9NTUNfREFUX0RJUjMgICAgKCh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopMHg0ODAwMDBGQykKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX01NQ19DTURfRElSICAgICAoKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikweDQ4MDAwMEZEKQorCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9TRFJDX0ExNCAgICAgICAgKCh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopMHg0ODAwMDAzMCkKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX1NEUkNfQTEzICAgICAgICAoKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikweDQ4MDAwMDMxKQorCisvKiBQaW4gTXV4aW5nIHJlZ2lzdGVycyB1c2VkIGZvciBDQU1FUkEgKi8KKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX1NZU19OUkVTV0FSTSAgICAoKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikweDQ4MDAwMTJCKQorCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9DQU1fWENMSyAgICAgICAgKCh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopMHg0ODAwMDBEQykKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX0NBTV9MQ0xLICAgICAgICAoKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikweDQ4MDAwMERCKQorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfQ0FNX1ZTICAgICAgICAgICgodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKTB4NDgwMDAwREEpCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9DQU1fSFMgICAgICAgICAgKCh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopMHg0ODAwMDBEOSkKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX0NBTV9EMCAgICAgICAgICAoKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikweDQ4MDAwMEQ4KQorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfQ0FNX0QxICAgICAgICAgICgodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKTB4NDgwMDAwRDcpCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9DQU1fRDIgICAgICAgICAgKCh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopMHg0ODAwMDBENikKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX0NBTV9EMyAgICAgICAgICAoKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikweDQ4MDAwMEQ1KQorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfQ0FNX0Q0ICAgICAgICAgICgodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKTB4NDgwMDAwRDQpCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9DQU1fRDUgICAgICAgICAgKCh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopMHg0ODAwMDBEMykKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX0NBTV9ENiAgICAgICAgICAoKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikweDQ4MDAwMEQyKQorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfQ0FNX0Q3ICAgICAgICAgICgodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKTB4NDgwMDAwRDEpCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9DQU1fRDggICAgICAgICAgKCh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopMHg0ODAwMDBEMCkKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX0NBTV9EOSAgICAgICAgICAoKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikweDQ4MDAwMENGKQorCisvKiBQaW4gTXV4aW5nIHJlZ2lzdGVycyB1c2VkIGZvciBMQ0QgKi8KKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX0RTU19EMCAgICAgICAgICAoKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikweDQ4MDAwMEIzKQorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfRFNTX0QxICAgICAgICAgICgodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKTB4NDgwMDAwQjQpCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9EU1NfRDIgICAgICAgICAgKCh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopMHg0ODAwMDBCNSkKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX0RTU19EMyAgICAgICAgICAoKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikweDQ4MDAwMEI2KQorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfRFNTX0Q0ICAgICAgICAgICgodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKTB4NDgwMDAwQjcpCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9EU1NfRDUgICAgICAgICAgKCh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopMHg0ODAwMDBCOCkKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX0RTU19ENiAgICAgICAgICAoKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikweDQ4MDAwMEI5KQorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfRFNTX0Q3ICAgICAgICAgICgodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKTB4NDgwMDAwQkEpCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9EU1NfRDggICAgICAgICAgKCh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopMHg0ODAwMDBCQikKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX0RTU19EOSAgICAgICAgICAoKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikweDQ4MDAwMEJDKQorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfRFNTX0QxMCAgICAgICAgICgodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKTB4NDgwMDAwQkQpCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9EU1NfRDExICAgICAgICAgKCh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopMHg0ODAwMDBCRSkKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX0RTU19EMTIgICAgICAgICAoKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikweDQ4MDAwMEJGKQorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfRFNTX0QxMyAgICAgICAgICgodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKTB4NDgwMDAwQzApCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9EU1NfRDE0ICAgICAgICAgKCh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopMHg0ODAwMDBDMSkKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX0RTU19EMTUgICAgICAgICAoKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikweDQ4MDAwMEMyKQorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfRFNTX0QxNiAgICAgICAgICgodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKTB4NDgwMDAwQzMpCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9EU1NfRDE3ICAgICAgICAgKCh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopMHg0ODAwMDBDNCkKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX0RTU19QQ0xLICAgICAgICAoKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikweDQ4MDAwMENCKQorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfRFNTX1ZTWU5DICAgICAgICgodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKTB4NDgwMDAwQ0MpCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9EU1NfSFNZTkMgICAgICAgKCh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopMHg0ODAwMDBDRCkKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX0RTU19BQ0JJQVMgICAgICAoKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikweDQ4MDAwMENFKQorCisvKiBQaW4gTXV4aW5nIHJlZ2lzdGVycyB1c2VkIGZvciBVQVJUMSAqLworI2RlZmluZSBDT05UUk9MX1BBRENPTkZfVUFSVDFfQ1RTICAgICAgICgodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKTB4NDgwMDAwQzUpCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9VQVJUMV9SVFMgICAgICAgKCh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopMHg0ODAwMDBDNikKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX1VBUlQxX1RYICAgICAgICAoKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikweDQ4MDAwMEM3KQorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfVUFSVDFfUlggICAgICAgICgodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKTB4NDgwMDAwQzgpCisKKy8qIFBpbiBNdXhpbmcgcmVnaXN0ZXJzIHVzZWQgZm9yIEkyQzEgKi8KKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX0kyQzFfU0NMICAgICAgICAoKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikweDQ4MDAwMTExKQorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfSTJDMV9TREEgICAgICAgICgodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKTB4NDgwMDAxMTIpCisKKy8qIFBpbiBNdXhpbmcgcmVnaXN0cmVzIHVzZWQgZm9yIFVTQjAuICovCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9VU0IwX1BVRU4JCSgodm9sYXRpbGUgdWludDggKikweDQ4MDAwMTFEKQorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfVVNCMF9WUAkJCSgodm9sYXRpbGUgdWludDggKikweDQ4MDAwMTFFKQorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfVVNCMF9WTQkJCSgodm9sYXRpbGUgdWludDggKikweDQ4MDAwMTFGKQorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfVVNCMF9SQ1YJCSgodm9sYXRpbGUgdWludDggKikweDQ4MDAwMTIwKQorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfVVNCMF9UWEVOCQkoKHZvbGF0aWxlIHVpbnQ4ICopMHg0ODAwMDEyMSkKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX1VTQjBfU0UwCQkoKHZvbGF0aWxlIHVpbnQ4ICopMHg0ODAwMDEyMikKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX1VTQjBfREFUCQkoKHZvbGF0aWxlIHVpbnQ4ICopMHg0ODAwMDEyMykKKworLyogUGluIE11eGluZyByZWdpc3RlcnMgdXNlZCBmb3IgVUFSVDMvSVJEQSAqLworI2RlZmluZSBDT05UUk9MX1BBRENPTkZfVUFSVDNfVFhfSVJUWAkoKHZvbGF0aWxlIHVpbnQ4ICopMHg0ODAwMDExOCkKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX1VBUlQzX1JYX0lSUlgJKCh2b2xhdGlsZSB1aW50OCAqKTB4NDgwMDAxMTkpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXJtMTEzNi9vbWFwMjQyMC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXJtMTEzNi9vbWFwMjQyMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlMjU0OWIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hcm0xMTM2L29tYXAyNDIwLmgKQEAgLTAsMCArMSwyMDAgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDQKKyAqIFRleGFzIEluc3RydW1lbnRzLCA8d3d3LnRpLmNvbT4KKyAqIFJpY2hhcmQgV29vZHJ1ZmYgPHItd29vZHJ1ZmYyQHRpLmNvbT4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaWZuZGVmIF9PTUFQMjQyMF9TWVNfSF8KKyNkZWZpbmUgX09NQVAyNDIwX1NZU19IXworCisjaW5jbHVkZSA8YXNtL2FyY2gvc2l6ZXMuaD4KKworLyoKKyAqIDI0MjAgc3BlY2lmaWMgU2VjdGlvbgorICovCisKKy8qIENPTlRST0wgKi8KKyNkZWZpbmUgT01BUDI0MjBfQ1RSTF9CQVNFICAgICgweDQ4MDAwMDAwKQorI2RlZmluZSBDT05UUk9MX1NUQVRVUyAgICAgICAgKE9NQVAyNDIwX0NUUkxfQkFTRSArIDB4MkY4KQorCisvKiBUQVAgaW5mb3JtYXRpb24gKi8KKyNkZWZpbmUgT01BUDI0MjBfVEFQX0JBU0UgICAgICgweDQ4MDE0MDAwKQorI2RlZmluZSBUQVBfSURDT0RFX1JFRyAgICAgICAgKE9NQVAyNDIwX1RBUF9CQVNFKzB4MjA0KQorCisvKiBHUE1DICovCisjZGVmaW5lIE9NQVAyNDIwX0dQTUNfQkFTRSAgICAoMHg2ODAwQTAwMCkKKyNkZWZpbmUgR1BNQ19TWVNDT05GSUcgICAgICAgIChPTUFQMjQyMF9HUE1DX0JBU0UrMHgxMCkKKyNkZWZpbmUgR1BNQ19JUlFFTkFCTEUgICAgICAgIChPTUFQMjQyMF9HUE1DX0JBU0UrMHgxQykKKyNkZWZpbmUgR1BNQ19USU1FT1VUX0NPTlRST0wgIChPTUFQMjQyMF9HUE1DX0JBU0UrMHg0MCkKKyNkZWZpbmUgR1BNQ19DT05GSUcgICAgICAgICAgIChPTUFQMjQyMF9HUE1DX0JBU0UrMHg1MCkKKyNkZWZpbmUgR1BNQ19DT05GSUcxXzAgICAgICAgIChPTUFQMjQyMF9HUE1DX0JBU0UrMHg2MCkKKyNkZWZpbmUgR1BNQ19DT05GSUcyXzAgICAgICAgIChPTUFQMjQyMF9HUE1DX0JBU0UrMHg2NCkKKyNkZWZpbmUgR1BNQ19DT05GSUczXzAgICAgICAgIChPTUFQMjQyMF9HUE1DX0JBU0UrMHg2OCkKKyNkZWZpbmUgR1BNQ19DT05GSUc0XzAgICAgICAgIChPTUFQMjQyMF9HUE1DX0JBU0UrMHg2QykKKyNkZWZpbmUgR1BNQ19DT05GSUc1XzAgICAgICAgIChPTUFQMjQyMF9HUE1DX0JBU0UrMHg3MCkKKyNkZWZpbmUgR1BNQ19DT05GSUc3XzAJICAgICAgKE9NQVAyNDIwX0dQTUNfQkFTRSsweDc4KQorI2RlZmluZSBHUE1DX0NPTkZJRzFfMSAgICAgICAgKE9NQVAyNDIwX0dQTUNfQkFTRSsweDkwKQorI2RlZmluZSBHUE1DX0NPTkZJRzJfMSAgICAgICAgKE9NQVAyNDIwX0dQTUNfQkFTRSsweDk0KQorI2RlZmluZSBHUE1DX0NPTkZJRzNfMSAgICAgICAgKE9NQVAyNDIwX0dQTUNfQkFTRSsweDk4KQorI2RlZmluZSBHUE1DX0NPTkZJRzRfMSAgICAgICAgKE9NQVAyNDIwX0dQTUNfQkFTRSsweDlDKQorI2RlZmluZSBHUE1DX0NPTkZJRzVfMSAgICAgICAgKE9NQVAyNDIwX0dQTUNfQkFTRSsweEEwKQorI2RlZmluZSBHUE1DX0NPTkZJRzZfMSAgICAgICAgKE9NQVAyNDIwX0dQTUNfQkFTRSsweEE0KQorI2RlZmluZSBHUE1DX0NPTkZJRzdfMQkgICAgICAoT01BUDI0MjBfR1BNQ19CQVNFKzB4QTgpCisKKy8qIFNNUyAqLworI2RlZmluZSBPTUFQMjQyMF9TTVNfQkFTRSAweDY4MDA4MDAwCisjZGVmaW5lIFNNU19TWVNDT05GSUcgICAgIChPTUFQMjQyMF9TTVNfQkFTRSsweDEwKQorCisvKiBTRFJDICovCisjZGVmaW5lIE9NQVAyNDIwX1NEUkNfQkFTRSAweDY4MDA5MDAwCisjZGVmaW5lIFNEUkNfU1lTQ09ORklHICAgICAoT01BUDI0MjBfU0RSQ19CQVNFKzB4MTApCisjZGVmaW5lIFNEUkNfU1RBVFVTICAgICAgICAoT01BUDI0MjBfU0RSQ19CQVNFKzB4MTQpCisjZGVmaW5lIFNEUkNfU0hBUklORyAgICAgICAoT01BUDI0MjBfU0RSQ19CQVNFKzB4NDQpCisjZGVmaW5lIFNEUkNfRExMQV9DVFJMICAgICAoT01BUDI0MjBfU0RSQ19CQVNFKzB4NjApCisjZGVmaW5lIFNEUkNfRExMQl9DVFJMICAgICAoT01BUDI0MjBfU0RSQ19CQVNFKzB4NjgpCisjZGVmaW5lIFNEUkNfUE9XRVIgICAgICAgICAoT01BUDI0MjBfU0RSQ19CQVNFKzB4NzApCisjZGVmaW5lIFNEUkNfTUNGR18wICAgICAgICAoT01BUDI0MjBfU0RSQ19CQVNFKzB4ODApCisjZGVmaW5lIFNEUkNfTVJfMCAgICAgICAgICAoT01BUDI0MjBfU0RSQ19CQVNFKzB4ODQpCisjZGVmaW5lIFNEUkNfQUNUSU1fQ1RSTEFfMCAoT01BUDI0MjBfU0RSQ19CQVNFKzB4OUMpCisjZGVmaW5lIFNEUkNfQUNUSU1fQ1RSTEJfMCAoT01BUDI0MjBfU0RSQ19CQVNFKzB4QTApCisjZGVmaW5lIFNEUkNfQUNUSU1fQ1RSTEFfMSAoT01BUDI0MjBfU0RSQ19CQVNFKzB4QzQpCisjZGVmaW5lIFNEUkNfQUNUSU1fQ1RSTEJfMSAoT01BUDI0MjBfU0RSQ19CQVNFKzB4QzgpCisjZGVmaW5lIFNEUkNfUkZSX0NUUkwgICAgICAoT01BUDI0MjBfU0RSQ19CQVNFKzB4QTQpCisjZGVmaW5lIFNEUkNfTUFOVUFMXzAgICAgICAoT01BUDI0MjBfU0RSQ19CQVNFKzB4QTgpCisjZGVmaW5lIE9NQVAyNDIwX1NEUkNfQ1MwICAweDgwMDAwMDAwCisjZGVmaW5lIE9NQVAyNDIwX1NEUkNfQ1MxICAweEEwMDAwMDAwCisjZGVmaW5lIENNRF9OT1AgICAgICAgICAgICAweDAKKyNkZWZpbmUgQ01EX1BSRUNIQVJHRSAgICAgIDB4MQorI2RlZmluZSBDTURfQVVUT1JFRlJFU0ggICAgMHgyCisjZGVmaW5lIENNRF9FTlRSX1BXUkRPV04gICAweDMKKyNkZWZpbmUgQ01EX0VYSVRfUFdSRE9XTiAgIDB4NAorI2RlZmluZSBDTURfRU5UUl9TUkZSU0ggICAgMHg1CisjZGVmaW5lIENNRF9DS0VfSElHSCAgICAgICAweDYKKyNkZWZpbmUgQ01EX0NLRV9MT1cgICAgICAgIDB4NworI2RlZmluZSBTT0ZUUkVTRVQgICAgICAgICAgQklUMQorI2RlZmluZSBTTUFSVF9JRExFICAgICAgICAgKDB4MiA8PCAzKQorI2RlZmluZSBSRUZfT05fSURMRSAgICAgICAgKDB4MSA8PCA2KQorCisKKy8qIFVBUlQgKi8KKyNkZWZpbmUgT01BUDI0MjBfVUFSVDEJICAgICAgMHg0ODA2QTAwMAorI2RlZmluZSBPTUFQMjQyMF9VQVJUMgkgICAgICAweDQ4MDZDMDAwCisjZGVmaW5lIE9NQVAyNDIwX1VBUlQzICAgICAgICAweDQ4MDZFMDAwCisKKy8qIEdlbmVyYWwgUHVycG9zZSBUaW1lcnMgKi8KKyNkZWZpbmUgT01BUDI0MjBfR1BUMSAgICAgICAgIDB4NDgwMjgwMDAKKyNkZWZpbmUgT01BUDI0MjBfR1BUMiAgICAgICAgIDB4NDgwMkEwMDAKKyNkZWZpbmUgT01BUDI0MjBfR1BUMyAgICAgICAgIDB4NDgwNzgwMDAKKyNkZWZpbmUgT01BUDI0MjBfR1BUNCAgICAgICAgIDB4NDgwN0EwMDAKKyNkZWZpbmUgT01BUDI0MjBfR1BUNSAgICAgICAgIDB4NDgwN0MwMDAKKyNkZWZpbmUgT01BUDI0MjBfR1BUNiAgICAgICAgIDB4NDgwN0UwMDAKKyNkZWZpbmUgT01BUDI0MjBfR1BUNyAgICAgICAgIDB4NDgwODAwMDAKKyNkZWZpbmUgT01BUDI0MjBfR1BUOCAgICAgICAgIDB4NDgwODIwMDAKKyNkZWZpbmUgT01BUDI0MjBfR1BUOSAgICAgICAgIDB4NDgwODQwMDAKKyNkZWZpbmUgT01BUDI0MjBfR1BUMTAgICAgICAgIDB4NDgwODYwMDAKKyNkZWZpbmUgT01BUDI0MjBfR1BUMTEgICAgICAgIDB4NDgwODgwMDAKKyNkZWZpbmUgT01BUDI0MjBfR1BUMTIgICAgICAgIDB4NDgwOEEwMDAKKworLyogdGltZXIgcmVncyBvZmZzZXRzICgzMiBiaXQgcmVncykgKi8KKyNkZWZpbmUgVElEUiAgICAgICAweDAgICAgICAvKiByICovCisjZGVmaW5lIFRJT0NQX0NGRyAgMHgxMCAgICAgLyogcncgKi8KKyNkZWZpbmUgVElTVEFUICAgICAweDE0ICAgICAvKiByICovCisjZGVmaW5lIFRJU1IgICAgICAgMHgxOCAgICAgLyogcncgKi8KKyNkZWZpbmUgVElFUiAgICAgICAweDFDICAgICAvKiBydyAqLworI2RlZmluZSBUV0VSICAgICAgIDB4MjAgICAgIC8qIHJ3ICovCisjZGVmaW5lIFRDTFIgICAgICAgMHgyNCAgICAgLyogcncgKi8KKyNkZWZpbmUgVENSUiAgICAgICAweDI4ICAgICAvKiBydyAqLworI2RlZmluZSBUTERSICAgICAgIDB4MkMgICAgIC8qIHJ3ICovCisjZGVmaW5lIFRUR1IgICAgICAgMHgzMCAgICAgLyogcncgKi8KKyNkZWZpbmUgVFdQUyAgICAgICAweDM0ICAgICAvKiByICovCisjZGVmaW5lIFRNQVIgICAgICAgMHgzOCAgICAgLyogcncgKi8KKyNkZWZpbmUgVENBUjEgICAgICAweDNjICAgICAvKiByICovCisjZGVmaW5lIFRTSUNSICAgICAgMHg0MCAgICAgLyogcncgKi8KKyNkZWZpbmUgVENBUjIgICAgICAweDQ0ICAgICAvKiByICovCisKKy8qIFdhdGNoRG9nIFRpbWVycyAoMSBzZWN1cmUsIDMgR1ApICovCisjZGVmaW5lIFdEMV9CQVNFICAgICAgICAgICAgICAweDQ4MDIwMDAwCisjZGVmaW5lIFdEMl9CQVNFICAgICAgICAgICAgICAweDQ4MDIyMDAwCisjZGVmaW5lIFdEM19CQVNFICAgICAgICAgICAgICAweDQ4MDI0MDAwCisjZGVmaW5lIFdENF9CQVNFICAgICAgICAgICAgICAweDQ4MDI2MDAwCisjZGVmaW5lIFdXUFMgICAgICAgMHgzNCAgICAgLyogciAqLworI2RlZmluZSBXU1BSICAgICAgIDB4NDggICAgIC8qIHJ3ICovCisjZGVmaW5lIFdEX1VOTE9DSzEgMHhBQUFBCisjZGVmaW5lIFdEX1VOTE9DSzIgMHg1NTU1CisKKy8qIFBSQ00gKi8KKyNkZWZpbmUgT01BUDI0MjBfQ01fQkFTRSAweDQ4MDA4MDAwCisjZGVmaW5lIFBSQ01fQ0xLQ0ZHX0NUUkwgKE9NQVAyNDIwX0NNX0JBU0UrMHgwODApCisjZGVmaW5lIENNX0NMS1NFTF9NUFUgICAgKE9NQVAyNDIwX0NNX0JBU0UrMHgxNDApCisjZGVmaW5lIENNX0ZDTEtFTjFfQ09SRSAgKE9NQVAyNDIwX0NNX0JBU0UrMHgyMDApCisjZGVmaW5lIENNX0ZDTEtFTjJfQ09SRSAgKE9NQVAyNDIwX0NNX0JBU0UrMHgyMDQpCisjZGVmaW5lIENNX0lDTEtFTjFfQ09SRSAgKE9NQVAyNDIwX0NNX0JBU0UrMHgyMTApCisjZGVmaW5lIENNX0lDTEtFTjJfQ09SRSAgKE9NQVAyNDIwX0NNX0JBU0UrMHgyMTQpCisjZGVmaW5lIENNX0NMS1NFTDFfQ09SRSAgKE9NQVAyNDIwX0NNX0JBU0UrMHgyNDApCisjZGVmaW5lIENNX0NMS1NFTF9XS1VQICAgKE9NQVAyNDIwX0NNX0JBU0UrMHg0NDApCisjZGVmaW5lIENNX0NMS1NFTDJfQ09SRSAgKE9NQVAyNDIwX0NNX0JBU0UrMHgyNDQpCisjZGVmaW5lIENNX0NMS1NFTF9HRlggICAgKE9NQVAyNDIwX0NNX0JBU0UrMHgzNDApCisjZGVmaW5lIFBNX1JTVENUUkxfV0tVUCAgKE9NQVAyNDIwX0NNX0JBU0UrMHg0NTApCisjZGVmaW5lIENNX0NMS0VOX1BMTCAgICAgKE9NQVAyNDIwX0NNX0JBU0UrMHg1MDApCisjZGVmaW5lIENNX0lETEVTVF9DS0dFTiAgKE9NQVAyNDIwX0NNX0JBU0UrMHg1MjApCisjZGVmaW5lIENNX0NMS1NFTDFfUExMICAgKE9NQVAyNDIwX0NNX0JBU0UrMHg1NDApCisjZGVmaW5lIENNX0NMS1NFTDJfUExMICAgKE9NQVAyNDIwX0NNX0JBU0UrMHg1NDQpCisjZGVmaW5lIENNX0NMS1NFTF9EU1AgICAgKE9NQVAyNDIwX0NNX0JBU0UrMHg4NDApCisKKy8qCisgKiBINCBzcGVjaWZpYyBTZWN0aW9uCisgKi8KKworLyoKKyAqICBUaGUgMjQyMCdzIGNoaXAgc2VsZWN0cyBhcmUgcHJvZ3JhbW1hYmxlLiAgVGhlIG1hc2sgUk9NCisgKiAgZG9lcyBjb25maWd1cmUgQ1MwIHRvIDB4MDgwMDAwMDAgYmVmb3JlIGRpc3BhdGNoLiAgU28sIGlmCisgKiAgeW91IHdhbnQgeW91ciBjb2RlIHRvIGxpdmUgYmVsb3cgdGhhdCBhZGRyZXNzLCB5b3UgaGF2ZSB0bworICogIGJlIHByZXBhcmVkIHRvIGp1bXAgdGhvdWdoIGhvb3BzLCB0byByZXNldCB0aGUgYmFzZSBhZGRyZXNzLgorICovCisjaWYgZGVmaW5lZChDT05GSUdfT01BUDI0MjBINCkKKy8qIEdQTUMgKi8KKyNpZmRlZiBDT05GSUdfVklSVElPX0EgICAgICAgIC8qIFByZSB2ZXJzaW9uIEIgKi8KKyMgZGVmaW5lIEg0X0NTMF9CQVNFICAgICAgICAgICAweDA4MDAwMDAwICAvKiBmbGFzaCAoNjQgTWVnIGFsaWduZWQpICovCisjIGRlZmluZSBINF9DUzFfQkFTRSAgICAgICAgICAgMHgwNDAwMDAwMCAgLyogZGVidWcgYm9hcmQgKi8KKyMgZGVmaW5lIEg0X0NTMl9CQVNFICAgICAgICAgICAweDBBMDAwMDAwICAvKiB3aWZpIGJvYXJkICovCisjZWxzZQorIyBkZWZpbmUgSDRfQ1MwX0JBU0UgICAgICAgICAgIDB4MDQwMDAwMDAgIC8qIGZsYXNoICg2NCBNZWcgYWxpZ25lZCkgKi8KKyMgZGVmaW5lIEg0X0NTMV9CQVNFICAgICAgICAgICAweDA4MDAwMDAwICAvKiBkZWJ1ZyBib2FyZCAqLworIyBkZWZpbmUgSDRfQ1MyX0JBU0UgICAgICAgICAgIDB4MEEwMDAwMDAgIC8qIHdpZmkgYm9hcmQgKi8KKyNlbmRpZgorCisvKiBiYXNlIGFkZHJlc3MgZm9yIGluZGlyZWN0IHZlY3RvcnMgKGludGVybmFsIGJvb3QgbW9kZSkgKi8KKyNkZWZpbmUgU1JBTV9PRkZTRVQwICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgU1JBTV9PRkZTRVQxICAgICAgICAgIDB4MDAyMDAwMDAKKyNkZWZpbmUgU1JBTV9PRkZTRVQyICAgICAgICAgIDB4MDAwMEY4MDAKKyNkZWZpbmUgU1JBTV9WRUNUX0NPREUgICAgICAgKFNSQU1fT0ZGU0VUMHxTUkFNX09GRlNFVDF8U1JBTV9PRkZTRVQyKQorCisjZGVmaW5lIExPV19MRVZFTF9TUkFNX1NUQUNLICAweDQwMjBGRkZDCisKKyNkZWZpbmUgUEVSSUZFUkFMX1BPUlRfQkFTRSAgIDB4NDgwRkUwMDMKKworLyogRlBHQSBvbiBEZWJ1ZyBib2FyZC4qLworI2RlZmluZSBFVEhfQ09OVFJPTF9SRUcgICAgICAgKEg0X0NTMV9CQVNFKzB4MzBiKQorI2RlZmluZSBMQU5fUkVTRVRfUkVHSVNURVIgICAgKEg0X0NTMV9CQVNFKzB4MWMpCisjZW5kaWYgIC8qIGVuZGlmIENPTkZJR18yNDIwSDQgKi8KKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWFybTExMzYvcmV2LmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hcm0xMTM2L3Jldi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkYmEyNWYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hcm0xMTM2L3Jldi5oCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDQKKyAqIFRleGFzIEluc3RydW1lbnRzLCA8d3d3LnRpLmNvbT4KKyAqIFJpY2hhcmQgV29vZHJ1ZmYgPHItd29vZHJ1ZmYyQHRpLmNvbT4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaWZuZGVmIF9PTUFQMjRYWF9SRVZfSF8KKyNkZWZpbmUgX09NQVAyNFhYX1JFVl9IXworCit0eXBlZGVmCXN0cnVjdAloNF9zeXN0ZW1fZGF0YSB7CisgICAgLyogYmFzZSBib2FyZCBpbmZvICovCisgICAgdTMyCSAgIGJhc2VfYl9yZXY7ICAgICAgICAgLyogcmV2IGZyb20gYmFzZSBib2FyZCBpMmMgKi8KKyAgICAvKiBjcHUgYm9hcmQgaW5mbyAqLworICAgIHUzMgkgICBjcHVfYl9yZXY7ICAgICAgICAgIC8qIHJldiBmcm9tIGNwdSBib2FyZCBpMmMgKi8KKyAgICB1MzIgICAgY3B1X2JfbXV4OyAgICAgICAgICAvKiBtdXggdHlwZSBvbiBkYXVnaHRlciBib2FyZCAqLworICAgIHUzMiAgICBjcHVfYl9kZHJfdHlwZTsgICAgIC8qIG1lbSB0eXBlICovCisgICAgdTMyICAgIGNwdV9iX2Rkcl9zcGVlZDsgICAgLyogZGRyIHNwZWVkIHJhdGluZyAqLworICAgIHUzMiAgICBjcHVfYl9zd2l0Y2hlczsgICAgIC8qIGJvb3QgY3RybCBzd2l0Y2ggc2V0dGluZ3MgKi8KKyAgICAvKiBjcHUgaW5mbyAqLworICAgIHUzMgkgICBjcHVfdHlwZTsgICAgICAgICAgIC8qIHR5cGUgb2YgY3B1OyAyNDIwLCAyNDIyLCAyNDMwLC4uLiovCisgICAgdTMyICAgIGNwdV9yZXY7ICAgICAgICAgICAgLyogcmV2IG9mIGdpdmVuIGNwdTsgRVMxLCBFUzIsLi4uKi8KK30gaDRfc3lzX2RhdGE7CisKKyNkZWZpbmUgQ0RCX0REUl9DT01CTyAgICAgICAgICAgICAgICAgICAvKiBjb21ibyBwYXJ0IG9uIGNwdSBkYXVnaHRlciBjYXJkICovCisjZGVmaW5lIENEQl9ERFJfSVBEQiAgICAgICAgICAgICAgICAgICAgLyogMngxNiBwYXJ0cyBvbiBkYXVnaHRlciBjYXJkICovCisKKyNkZWZpbmUgRERSXzEwMCAgICAgICAgIDEwMCAgICAgICAgICAgICAvKiB0eXBlIGZvdW5kIG9uIG1vc3QgbWVtIGQtYm9hcmRzICovCisjZGVmaW5lIEREUl8xMTEgICAgICAgICAxMTEgICAgICAgICAgICAgLyogc29tZSBjb21ibyBwYXJ0cyAqLworI2RlZmluZSBERFJfMTMzICAgICAgICAgMTMzICAgICAgICAgICAgIC8qIG1vc3QgY29tYm8sIHNvbWUgbWVtIGQtYm9hcmRzICovCisjZGVmaW5lIEREUl8xNjUgICAgICAgICAxNjUgICAgICAgICAgICAgLyogZnV0dXJlIHBhcnRzICovCisKKyNkZWZpbmUgQ1BVXzI0MjAgICAgICAgIDB4MjQyMAorI2RlZmluZSBDUFVfMjQyMiAgICAgICAgMHgyNDIyCisKKyNkZWZpbmUgQ1BVXzI0MjJfRVMxICAgIDEKKyNkZWZpbmUgQ1BVXzI0MjJfRVMyICAgIDIKKyNkZWZpbmUgQ1BVXzI0MjBfRVMxICAgIDEKKyNkZWZpbmUgQ1BVXzI0MjBfRVMyICAgIDIKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWFybTExMzYvc2l6ZXMuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWFybTExMzYvc2l6ZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZGRkZDhlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXJtMTEzNi9zaXplcy5oCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4JIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNwkgVVNBCisgKi8KKy8qICBTaXplIGRlZmludGlvbnMKKyAqICBDb3B5cmlnaHQgKEMpIEFSTSBMaW1pdGVkIDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKi8KKworI2lmbmRlZiBfX3NpemVzX2gKKyNkZWZpbmUgX19zaXplc19oCQkJMQorCisvKiBoYW5keSBzaXplcyAqLworI2RlZmluZSBTWl8xSwkJCQkweDAwMDAwNDAwCisjZGVmaW5lIFNaXzRLCQkJCTB4MDAwMDEwMDAKKyNkZWZpbmUgU1pfOEsJCQkJMHgwMDAwMjAwMAorI2RlZmluZSBTWl8xNksJCQkJMHgwMDAwNDAwMAorI2RlZmluZSBTWl8zMksJCQkJMHgwMDAwODAwMAorI2RlZmluZSBTWl82NEsJCQkJMHgwMDAxMDAwMAorI2RlZmluZSBTWl8xMjhLCQkJCTB4MDAwMjAwMDAKKyNkZWZpbmUgU1pfMjU2SwkJCQkweDAwMDQwMDAwCisjZGVmaW5lIFNaXzUxMksJCQkJMHgwMDA4MDAwMAorCisjZGVmaW5lIFNaXzFNCQkJCTB4MDAxMDAwMDAKKyNkZWZpbmUgU1pfMk0JCQkJMHgwMDIwMDAwMAorI2RlZmluZSBTWl80TQkJCQkweDAwNDAwMDAwCisjZGVmaW5lIFNaXzhNCQkJCTB4MDA4MDAwMDAKKyNkZWZpbmUgU1pfMTZNCQkJCTB4MDEwMDAwMDAKKyNkZWZpbmUgU1pfMzFNCQkJCTB4MDFGMDAwMDAKKyNkZWZpbmUgU1pfMzJNCQkJCTB4MDIwMDAwMDAKKyNkZWZpbmUgU1pfNjRNCQkJCTB4MDQwMDAwMDAKKyNkZWZpbmUgU1pfMTI4TQkJCQkweDA4MDAwMDAwCisjZGVmaW5lIFNaXzI1Nk0JCQkJMHgxMDAwMDAwMAorI2RlZmluZSBTWl81MTJNCQkJCTB4MjAwMDAwMDAKKworI2RlZmluZSBTWl8xRwkJCQkweDQwMDAwMDAwCisjZGVmaW5lIFNaXzJHCQkJCTB4ODAwMDAwMDAKKworI2VuZGlmCS8qIF9fc2l6ZXNfaCAqLworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hcm0xMTM2L3N5c19pbmZvLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hcm0xMTM2L3N5c19pbmZvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Y3N2QzYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWFybTExMzYvc3lzX2luZm8uaApAQCAtMCwwICsxLDc4IEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDA0CisgKiBUZXhhcyBJbnN0cnVtZW50cywgPHd3dy50aS5jb20+CisgKiBSaWNoYXJkIFdvb2RydWZmIDxyLXdvb2RydWZmMkB0aS5jb20+CisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2lmbmRlZiBfT01BUDI0WFhfU1lTX0lORk9fSF8KKyNkZWZpbmUgX09NQVAyNFhYX1NZU19JTkZPX0hfCisKK3R5cGVkZWYgc3RydWN0ICBoNF9zeXN0ZW1fZGF0YSB7CisJLyogYmFzZSBib2FyZCBpbmZvICovCisJdTMyIGJhc2VfYl9yZXY7CQkvKiByZXYgZnJvbSBiYXNlIGJvYXJkIGkyYyAqLworCS8qIGNwdSBib2FyZCBpbmZvICovCisJdTMyIGNwdV9iX3JldjsJCS8qIHJldiBmcm9tIGNwdSBib2FyZCBpMmMgKi8KKwl1MzIgY3B1X2JfbXV4OwkJLyogbXV4IHR5cGUgb24gZGF1Z2h0ZXIgYm9hcmQgKi8KKwl1MzIgY3B1X2JfZGRyX3R5cGU7CS8qIG1lbSB0eXBlICovCisJdTMyIGNwdV9iX2Rkcl9zcGVlZDsJLyogZGRyIHNwZWVkIHJhdGluZyAqLworCXUzMiBjcHVfYl9zd2l0Y2hlczsJLyogYm9vdCBjdHJsIHN3aXRjaCBzZXR0aW5ncyAqLworCS8qIGNwdSBpbmZvICovCisJdTMyIGNwdV90eXBlOwkJLyogdHlwZSBvZiBjcHU7IDI0MjAsIDI0MjIsIDI0MzAsLi4uKi8KKwl1MzIgY3B1X3JldjsJCS8qIHJldiBvZiBnaXZlbiBjcHU7IEVTMSwgRVMyLC4uLiovCit9IGg0X3N5c19kYXRhOworCisjZGVmaW5lIEREUl9TVEFDS0VEICAgICAgIDMgICAgICAvKiBzdGFja2VkIHBhcnQgb24gMjQyMiAqLworI2RlZmluZSBERFJfQ09NQk8gICAgICAgICAyICAgICAgLyogY29tYm8gcGFydCBvbiBjcHUgZGF1Z2h0ZXIgY2FyZCAobWVuYWxhZXVzKSAqLworI2RlZmluZSBERFJfRElTQ1JFVEUgICAgICAxICAgICAgLyogMngxNiBwYXJ0cyBvbiBkYXVnaHRlciBjYXJkICovCisKKyNkZWZpbmUgRERSXzEwMCAgICAgICAgICAgMTAwICAgIC8qIHR5cGUgZm91bmQgb24gbW9zdCBtZW0gZC1ib2FyZHMgKi8KKyNkZWZpbmUgRERSXzExMSAgICAgICAgICAgMTExICAgIC8qIHNvbWUgY29tYm8gcGFydHMgKi8KKyNkZWZpbmUgRERSXzEzMyAgICAgICAgICAgMTMzICAgIC8qIG1vc3QgY29tYm8sIHNvbWUgbWVtIGQtYm9hcmRzICovCisjZGVmaW5lIEREUl8xNjUgICAgICAgICAgIDE2NSAgICAvKiBmdXR1cmUgcGFydHMgKi8KKworI2RlZmluZSBDUFVfMjQyMCAgICAgICAgICAweDI0MjAKKyNkZWZpbmUgQ1BVXzI0MjIgICAgICAgICAgMHgyNDIyCisKKyNkZWZpbmUgQ1BVXzI0MjJfRVMxICAgICAgMQorI2RlZmluZSBDUFVfMjQyMl9FUzIgICAgICAyCisjZGVmaW5lIENQVV8yNDIwX0VTMSAgICAgIDEKKyNkZWZpbmUgQ1BVXzI0MjBfRVMyICAgICAgMgorCisjZGVmaW5lIENQVV8yNDIwX0NISVBJRCAgIDB4MEI1RDkwMDAKKyNkZWZpbmUgQ1BVXzI0WFhfSURfTUFTSyAgMHgwRkZGRjAwMAorI2RlZmluZSBDUFVfMjQyWF9SRVZfTUFTSyAweEYwMDAwMDAwCisKKyNkZWZpbmUgQk9BUkRfSDRfTUVORUxBVVMgMQorI2RlZmluZSBCT0FSRF9INF9TRFAgICAgICAyCisKKyNkZWZpbmUgR1BNQ19NVVhFRCAgICAgICAgMQorI2RlZmluZSBHUE1DX05PTk1VWEVEICAgICAwCisKKyNkZWZpbmUgVFlQRV9OQU5EICAgICAgICAgMHg4MDAgICAvKiBiaXQgcG9zIGZvciBuYW5kIGluIGdwbWMgcmVnICovCisjZGVmaW5lIFRZUEVfTk9SICAgICAgICAgIDB4MDAwCisKKyNkZWZpbmUgV0lEVEhfOEJJVCAgICAgICAgMHgwMDAwCisjZGVmaW5lIFdJRFRIXzE2QklUICAgICAgIDB4MTAwMCAgLyogYml0IHBvcyBmb3IgMTYgYml0IGluIGdwbWMgKi8KKworI2RlZmluZSBJMkNfTUVORUxBVVMgMHg3MgkvKiBpMmMgaWQgZm9yIGNvbXBhbmlvbiBjaGlwICovCisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hcm0xMTM2L3N5c19wcm90by5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXJtMTEzNi9zeXNfcHJvdG8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzIwNmY2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXJtMTEzNi9zeXNfcHJvdG8uaApAQCAtMCwwICsxLDQ4IEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDA0CisgKiBUZXhhcyBJbnN0cnVtZW50cywgPHd3dy50aS5jb20+CisgKiBSaWNoYXJkIFdvb2RydWZmIDxyLXdvb2RydWZmMkB0aS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIC9QVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICAqLworI2lmbmRlZiBfT01BUDI0WFhfU1lTX1BST1RPX0hfCisjZGVmaW5lIF9PTUFQMjRYWF9TWVNfUFJPVE9fSF8KKwordm9pZCBwcmNtX2luaXQodm9pZCk7Cit2b2lkIG1lbWlmX2luaXQodm9pZCk7Cit2b2lkIHNkcmNfaW5pdCh2b2lkKTsKK3ZvaWQgZG9fc2RyY19pbml0KHUzMix1MzIpOwordm9pZCBncG1jX2luaXQodm9pZCk7CisKK3ZvaWQgZXRoZXJfaW5pdCh2b2lkKTsKK3ZvaWQgd2F0Y2hkb2dfaW5pdCh2b2lkKTsKK3ZvaWQgc2V0X211eGNvbmZfcmVncyh2b2lkKTsKK3ZvaWQgcGVyaXBoZXJhbF9lbmFibGUodm9pZCk7CisKK3UzMiBnZXRfY3B1X3R5cGUodm9pZCk7Cit1MzIgZ2V0X2NwdV9yZXYodm9pZCk7Cit1MzIgZ2V0X21lbV90eXBlKHZvaWQpOwordTMyIGdldF9zeXNib290X3ZhbHVlKHZvaWQpOwordTMyIGdldF9ncG1jMF9iYXNlKHZvaWQpOwordTMyIGlzX2dwbWNfbXV4ZWQodm9pZCk7Cit1MzIgZ2V0X2dwbWMwX3R5cGUodm9pZCk7Cit1MzIgZ2V0X2dwbWMwX3dpZHRoKHZvaWQpOwordTMyIHdhaXRfb25fdmFsdWUodTMyIHJlYWRfYml0X21hc2ssIHUzMiBtYXRjaF92YWx1ZSwgdTMyIHJlYWRfYWRkciwgdTMyIGJvdW5kKTsKK3UzMiBnZXRfYm9hcmRfdHlwZSh2b2lkKTsKK3ZvaWQgZGlzcGxheV9ib2FyZF9pbmZvKHUzMik7Cit2b2lkIHVwZGF0ZV9tdXgodTMyLHUzMik7CisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2lvLmggYi9pbmNsdWRlL2FzbS1hcm0vaW8uaAppbmRleCAwZjM4ZTEwLi5jMmI2OWZiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vaW8uaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vaW8uaApAQCAtMzUsMTAgKzM1LDEyIEBACiAgKiB0byB0aGUgYXJjaGl0ZWN0dXJlIHNwZWNpZmljIGNvZGUuCiAgKi8KICNkZWZpbmUgX19hcmNoX2dldGIoYSkJCQkoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKGEpKQotI2RlZmluZSBfX2FyY2hfZ2V0bChhKQkJCSgqKHZvbGF0aWxlIHVuc2lnbmVkIGludCAgKikoYSkpCisjZGVmaW5lIF9fYXJjaF9nZXR3KGEpCQkJKCoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikoYSkpCisjZGVmaW5lIF9fYXJjaF9nZXRsKGEpCQkJKCoodm9sYXRpbGUgdW5zaWduZWQgaW50ICopKGEpKQogCiAjZGVmaW5lIF9fYXJjaF9wdXRiKHYsYSkJCSgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoYSkgPSAodikpCi0jZGVmaW5lIF9fYXJjaF9wdXRsKHYsYSkJCSgqKHZvbGF0aWxlIHVuc2lnbmVkIGludCAgKikoYSkgPSAodikpCisjZGVmaW5lIF9fYXJjaF9wdXR3KHYsYSkJCSgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKGEpID0gKHYpKQorI2RlZmluZSBfX2FyY2hfcHV0bCh2LGEpCQkoKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikoYSkgPSAodikpCiAKIGV4dGVybiB2b2lkIF9fcmF3X3dyaXRlc2IodW5zaWduZWQgaW50IGFkZHIsIGNvbnN0IHZvaWQgKmRhdGEsIGludCBieXRlbGVuKTsKIGV4dGVybiB2b2lkIF9fcmF3X3dyaXRlc3codW5zaWduZWQgaW50IGFkZHIsIGNvbnN0IHZvaWQgKmRhdGEsIGludCB3b3JkbGVuKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9vbWFwMjQyMGg0LmggYi9pbmNsdWRlL2NvbmZpZ3Mvb21hcDI0MjBoNC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5MzNjMjQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2NvbmZpZ3Mvb21hcDI0MjBoNC5oCkBAIC0wLDAgKzEsMjEzIEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDA0CisgKiBUZXhhcyBJbnN0cnVtZW50cy4KKyAqIFJpY2hhcmQgV29vZHJ1ZmYgPHItd29vZHJ1ZmYyQHRpLmNvbT4KKyAqIEtzaGl0aWogR3VwdGEgPGtzaGl0aWpAdGkuY29tPgorICoKKyAqIENvbmZpZ3VyYXRpb24gc2V0dGluZ3MgZm9yIHRoZSAyNDJ4IFRJIEg0IGJvYXJkLgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgkgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpZm5kZWYgX19DT05GSUdfSAorI2RlZmluZSBfX0NPTkZJR19ICisKKy8qCisgKiBIaWdoIExldmVsIENvbmZpZ3VyYXRpb24gT3B0aW9ucworICovCisjZGVmaW5lIENPTkZJR19BUk0xMTM2ICAgICAgICAgICAxICAgIC8qIFRoaXMgaXMgYW4gYXJtMTEzNiBDUFUgY29yZSAqLworI2RlZmluZSBDT05GSUdfT01BUCAgICAgICAgICAgICAgMSAgICAvKiBpbiBhIFRJIE9NQVAgY29yZSAqLworI2RlZmluZSBDT05GSUdfT01BUDI0MjAJICAgICAgICAgMSAgICAvKiB3aGljaCBpcyBpbiBhIDI0MjAgKi8KKyNkZWZpbmUgQ09ORklHX09NQVAyNDIwSDQgICAgICAgIDEgICAgLyogYW5kIG9uIGEgSDQgYm9hcmQgKi8KKy8vI2RlZmluZSBDT05GSUdfQVBUSVggICAgICAgICAgIDEgICAgLyogZGVmaW5lIGlmIG9uIEFQVElYIHRlc3QgY2hpcCAqLworLy8jZGVmaW5lIENPTkZJR19WSVJUSU8gICAgICAgICAgMSAgICAvKiBVc2luZyBWaXJ0aW8gc2ltdWxhdG9yICovCisKKyNkZWZpbmUgUFJDTV9DT05GSUdfSUkgICAgICAgICAgIDEgICAgCisjZGVmaW5lIENPTkZJR19QQVJUSUFMX1NSQU0gICAgICAxCisKKyNpbmNsdWRlIDxhc20vYXJjaC9vbWFwMjQyMC5oPiAgICAgICAgLyogZ2V0IGNoaXAgYW5kIGJvYXJkIGRlZnMgKi8KKworI2lmZGVmIENPTkZJR19BUFRJWAorI2RlZmluZSBWX1NDTEsgICAgICAgICAgICAgICAgICAgMTUwMDAwMAorI2Vsc2UKKyNkZWZpbmUgVl9TQ0xLICAgICAgICAgICAgICAgICAgIDEyMDAwMDAwCisjZW5kaWYKKworLyogaW5wdXQgY2xvY2sgb2YgUExMICovCisvKiB0aGUgT01BUDI0MjAgSDQgaGFzIDEyTUh6LCAxM01Ieiwgb3IgMTkuMk1oeiBjcnlzdGFsIGlucHV0ICovCisjZGVmaW5lIENPTkZJR19TWVNfQ0xLX0ZSRVEgICAgICBWX1NDTEsKKworI3VuZGVmIENPTkZJR19VU0VfSVJRICAgICAgICAgICAgICAgICAvKiBubyBzdXBwb3J0IGZvciBJUlFzICovCisjZGVmaW5lIENPTkZJR19NSVNDX0lOSVRfUgorCisjZGVmaW5lIENPTkZJR19DTURMSU5FX1RBRyAgICAgICAxICAgIC8qIGVuYWJsZSBwYXNzaW5nIG9mIEFUQUdzICovCisjZGVmaW5lIENPTkZJR19TRVRVUF9NRU1PUllfVEFHUyAxCisjZGVmaW5lIENPTkZJR19JTklUUkRfVEFHICAgICAgICAxCisKKy8qCisgKiBTaXplIG9mIG1hbGxvYygpIHBvb2wKKyAqLworI2RlZmluZSBDRkdfRU5WX1NJWkUgICAgICAgICAgICAgU1pfMTI4SyAgICAgLyogVG90YWwgU2l6ZSBvZiBFbnZpcm9ubWVudCBTZWN0b3IgKi8KKyNkZWZpbmUgQ0ZHX01BTExPQ19MRU4gICAgICAgICAgIChDRkdfRU5WX1NJWkUgKyBTWl8xMjhLKQorI2RlZmluZSBDRkdfR0JMX0RBVEFfU0laRSAgICAgICAgMTI4ICAvKiBzaXplIGluIGJ5dGVzIHJlc2VydmVkIGZvciBpbml0aWFsIGRhdGEgKi8KKworLyoKKyAqIEhhcmR3YXJlIGRyaXZlcnMKKyAqLworIAorLyoKKyAqIFNNQzkxYzk2IEV0aGVyZW50CisgKi8KKyNkZWZpbmUgQ09ORklHX0RSSVZFUl9MQU45MUM5NgorI2RlZmluZSBDT05GSUdfTEFOOTFDOTZfQkFTRSAgICAgKEg0X0NTMV9CQVNFKzB4MzAwKQorI2RlZmluZSBDT05GSUdfTEFOOTFDOTZfRVhUX1BIWQorCisvKgorICogTlMxNjU1MCBDb25maWd1cmF0aW9uCisgKi8KKyNpZmRlZiBDT05GSUdfQVBUSVgKKyNkZWZpbmUgVl9OUzE2NTUwX0NMSyAgICAgICAgICAgICg2MDAwMDAwKSAgIC8qIDZNSHogaW4gY3VycmVudCBNYXhTZXQgKi8KKyNlbHNlCisjZGVmaW5lIFZfTlMxNjU1MF9DTEsgICAgICAgICAgICAoNDgwMDAwMDApICAvKiA0OE1IeiAoQVBMTDk2LzIpICovCisjZW5kaWYKKworI2RlZmluZSBDRkdfTlMxNjU1MAorI2RlZmluZSBDRkdfTlMxNjU1MF9TRVJJQUwKKyNkZWZpbmUgQ0ZHX05TMTY1NTBfUkVHX1NJWkUgICAgICgtNCkKKyNkZWZpbmUgQ0ZHX05TMTY1NTBfQ0xLICAgICAgICAgIFZfTlMxNjU1MF9DTEsgICAvKiAzTUh6ICgxLjVNSHoqMikgKi8KKyNkZWZpbmUgQ0ZHX05TMTY1NTBfQ09NMSAgICAgICAgIE9NQVAyNDIwX1VBUlQxCisKKy8qCisgKiBzZWxlY3Qgc2VyaWFsIGNvbnNvbGUgY29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENPTkZJR19TRVJJQUwxICAgICAgICAgICAxICAgIC8qIFVBUlQxIG9uIEg0ICovCisKKyAgLyoKKyAgICogSTJDIGNvbmZpZ3VyYXRpb24KKyAgICovCisjZGVmaW5lIENPTkZJR19IQVJEX0kyQworI2RlZmluZSBDRkdfSTJDX1NQRUVEICAgICAgICAgIDEwMDAwMAorI2RlZmluZSBDRkdfSTJDX1NMQVZFICAgICAgICAgIDEKKyNkZWZpbmUgQ09ORklHX0RSSVZFUl9PTUFQMjRYWF9JMkMKKworLyogYWxsb3cgdG8gb3ZlcndyaXRlIHNlcmlhbCBhbmQgZXRoYWRkciAqLworI2RlZmluZSBDT05GSUdfRU5WX09WRVJXUklURQorI2RlZmluZSBDT05GSUdfQ09OU19JTkRFWCAgICAgICAgMQorI2RlZmluZSBDT05GSUdfQkFVRFJBVEUgICAgICAgICAgMTE1MjAwCisjZGVmaW5lIENGR19CQVVEUkFURV9UQUJMRSAgICAgICB7OTYwMCwgMTkyMDAsIDM4NDAwLCA1NzYwMCwgMTE1MjAwfQorCisjZGVmaW5lIENPTkZJR19DT01NQU5EUyAgICAgICAgICAoQ09ORklHX0NNRF9ERkwgfCBDRkdfQ01EX0RIQ1AgfCBDRkdfQ01EX0kyQykKKworLy8gSSdkIGxpa2UgdG8gZ2V0IHRvIHRoZXNlLiBTbmFwIGtlcm5lbCBsb2FkcyBpZiB3ZSBtYWtlIE1NQyBnbyAvLworICAvLyAjZGVmaW5lIENPTkZJR19DT01NQU5EUyAgICAgICAoQ09ORklHX0NNRF9ERkwgfCBDRkdfQ01EX05BTkQgfCBDRkdfQ01EX0pGRlMyIHwgQ0ZHX0NNRF9ESENQIHwgQ0ZHX0NNRF9NTUMgfCBDRkdfQ01EX0ZBVCB8IENGR19DTURfSTJDKQorCisjZGVmaW5lIENPTkZJR19CT09UUF9NQVNLICAgICAgICBDT05GSUdfQk9PVFBfREVGQVVMVAorCisvKiB0aGlzIG11c3QgYmUgaW5jbHVkZWQgQUZURVIgdGhlIGRlZmluaXRpb24gb2YgQ09ORklHX0NPTU1BTkRTIChpZiBhbnkpICovCisjaW5jbHVkZSA8Y21kX2NvbmZkZWZzLmg+CisKKyNkZWZpbmUgQ09ORklHX0JPT1RERUxBWSAgICAgICAgIDMKKworI2lmZGVmIE5GU19CT09UX0RFRkFVTFRTCisjZGVmaW5lIENPTkZJR19CT09UQVJHUwkgICAgICAgICAibWVtPTMyTSBjb25zb2xlPXR0eVMwLDExNTIwMG44IG5vaW5pdHJkIHJvb3Q9L2Rldi9uZnMgcncgbmZzcm9vdD0xMjguMjQ3Ljc3LjE1ODovaG9tZS9hMDM4NDg2NC93dGJ1L3Jvb3RmcyBpcD1kaGNwIgorI2Vsc2UKKyNkZWZpbmUgQ09ORklHX0JPT1RBUkdTICAgICAgICAgICJyb290PS9kZXYvcmFtMCBydyBtZW09MzJNIGNvbnNvbGU9dHR5UzAsMTE1MjAwbjggaW5pdHJkPTB4ODA2MDAwMDAsOE0gcmFtZGlza19zaXplPTgxOTIiCisjZW5kaWYKKworI2RlZmluZSBDT05GSUdfTkVUTUFTSyAgICAgICAgICAgMjU1LjI1NS4yNTQuMAorI2RlZmluZSBDT05GSUdfSVBBRERSICAgICAgICAgICAgMTI4LjI0Ny43Ny45MAorI2RlZmluZSBDT05GSUdfU0VSVkVSSVAgICAgICAgICAgMTI4LjI0Ny43Ny4xNTgKKyNkZWZpbmUgQ09ORklHX0JPT1RGSUxFICAgICAgICAgICJ1SW1hZ2UiCisKKy8qCisgKiBNaXNjZWxsYW5lb3VzIGNvbmZpZ3VyYWJsZSBvcHRpb25zCisgKi8KKyNpZmRlZiBDT05GSUdfQVBUSVgKKyNkZWZpbmUgVl9QUk9NUFQgICAgICAgICAgICAgICAgICJPTUFQMjQyMCBBcHRpeCAjICIKKyNlbHNlCisjZGVmaW5lIFZfUFJPTVBUICAgICAgICAgICAgICAgICAiT01BUDI0MnggSDQgIyAiCisjZW5kaWYKKworI2RlZmluZSBDRkdfTE9OR0hFTFAgICAgICAgICAgICAgLyogdW5kZWYgdG8gc2F2ZSBtZW1vcnkgKi8KKyNkZWZpbmUgQ0ZHX1BST01QVCAgICAgICAgICAgICAgIFZfUFJPTVBUCisjZGVmaW5lIENGR19DQlNJWkUgICAgICAgICAgICAgICAyNTYgIC8qIENvbnNvbGUgSS9PIEJ1ZmZlciBTaXplICovCisvKiBQcmludCBCdWZmZXIgU2l6ZSAqLworI2RlZmluZSBDRkdfUEJTSVpFICAgICAgICAgICAgICAgKENGR19DQlNJWkUrc2l6ZW9mKENGR19QUk9NUFQpKzE2KQorI2RlZmluZSBDRkdfTUFYQVJHUyAgICAgICAgICAgICAgMTYgICAgICAgICAgLyogbWF4IG51bWJlciBvZiBjb21tYW5kIGFyZ3MgKi8KKyNkZWZpbmUgQ0ZHX0JBUkdTSVpFICAgICAgICAgICAgIENGR19DQlNJWkUgIC8qIEJvb3QgQXJndW1lbnQgQnVmZmVyIFNpemUgKi8KKworI2RlZmluZSBDRkdfTUVNVEVTVF9TVEFSVCAgICAgICAgKE9NQVAyNDIwX1NEUkNfQ1MwKSAgLyogbWVtdGVzdCB3b3JrcyBvbiAqLworI2RlZmluZSBDRkdfTUVNVEVTVF9FTkQgICAgICAgICAgKE9NQVAyNDIwX1NEUkNfQ1MwK1NaXzMxTSkKKworI3VuZGVmCUNGR19DTEtTX0lOX0haICAgICAgICAgICAvKiBldmVyeXRoaW5nLCBpbmNsIGJvYXJkIGluZm8sIGluIEh6ICovCisKKyNkZWZpbmUgQ0ZHX0xPQURfQUREUiAgICAgICAgICAgIChPTUFQMjQyMF9TRFJDX0NTMCkgLyogZGVmYXVsdCBsb2FkIGFkZHJlc3MgKi8KKworLyogVGhlIDI0MjAgaGFzIDEyIEdQIHRpbWVycywgdGhleSBjYW4gYmUgZHJpdmVuIGJ5IHRoZSBTeXNDbGsgKDEyLzEzLzE5LjIpIG9yIGJ5CisgKiAzMktIeiBjbGssIG9yIGZyb20gZXh0ZXJuYWwgc2lnLiBUaGlzIHJhdGUgaXMgZGl2aWRlZCBieSBhIGxvY2FsIGRpdmlzb3IuCisgKi8KKyNpZmRlZiBDT05GSUdfQVBUSVgKKyNkZWZpbmUgVl9QVlQgICAgICAgICAgICAgICAgICAgIDMKKyNlbHNlCisjZGVmaW5lIFZfUFZUICAgICAgICAgICAgICAgICAgICA3ICAvKiB1c2Ugd2l0aCAxMk1Iei8xMjggKi8KKyNlbmRpZgorCisjZGVmaW5lIENGR19USU1FUkJBU0UgICAgICAgICAgICBPTUFQMjQyMF9HUFQyCisjZGVmaW5lIENGR19QVlQgICAgICAgICAgICAgICAgICBWX1BWVCAgLyogMl4ocHZ0KzEpICovCisjZGVmaW5lIENGR19IWgkgICAgICAgICAgICAgICAgICgoQ09ORklHX1NZU19DTEtfRlJFUSkvKDIgPDwgQ0ZHX1BWVCkpCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFN0YWNrIHNpemVzCisgKgorICogVGhlIHN0YWNrIHNpemVzIGFyZSBzZXQgdXAgaW4gc3RhcnQuUyB1c2luZyB0aGUgc2V0dGluZ3MgYmVsb3cKKyAqLworI2RlZmluZSBDT05GSUdfU1RBQ0tTSVpFICAgICAgICAgU1pfMTI4SyAvKiByZWd1bGFyIHN0YWNrICovCisjaWZkZWYgQ09ORklHX1VTRV9JUlEKKyNkZWZpbmUgQ09ORklHX1NUQUNLU0laRV9JUlEgICAgIFNaXzRLICAgLyogSVJRIHN0YWNrICovCisjZGVmaW5lIENPTkZJR19TVEFDS1NJWkVfRklRICAgICBTWl80SyAgIC8qIEZJUSBzdGFjayAqLworI2VuZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFBoeXNpY2FsIE1lbW9yeSBNYXAKKyAqLworI2RlZmluZSBDT05GSUdfTlJfRFJBTV9CQU5LUyAgICAgMiAgICAgICAgICAgICAgICAgLyogQ1MxIG1heSBvciBtYXkgbm90IGJlIHBvcHVsYXRlZCAqLworI2RlZmluZSBQSFlTX1NEUkFNXzEgICAgICAgICAgICAgT01BUDI0MjBfU0RSQ19DUzAKKyNkZWZpbmUgUEhZU19TRFJBTV8xX1NJWkUgICAgICAgIFNaXzMyTSAgICAgICAgICAgIC8qIGF0IGxlYXN0IDMyIG1lZyAqLworI2RlZmluZSBQSFlTX1NEUkFNXzIgICAgICAgICAgICAgT01BUDI0MjBfU0RSQ19DUzEKKworI2RlZmluZSBQSFlTX0ZMQVNIXzEgICAgICAgICAgICAgSDRfQ1MwX0JBU0UJICAgLyogRmxhc2ggQmFuayAjMSAqLworI2RlZmluZSBQSFlTX0ZMQVNIX1NJWkVfMSAgICAgICAgU1pfMzJNCisjZGVmaW5lIFBIWVNfRkxBU0hfMiAgICAgICAgICAgICAoSDRfQ1MwX0JBU0UrU1pfMzJNKSAvKiBzYW1lIGNzLCAyIGNoaXBzIGluIHNlcmllcyAqLworI2RlZmluZSBQSFlTX0ZMQVNIX1NJWkVfMiAgICAgICAgU1pfMzJNCisjZGVmaW5lIENGR19GTEFTSF9CQVNFICAgICAgICAgICBQSFlTX0ZMQVNIXzEKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogRkxBU0ggYW5kIGVudmlyb25tZW50IG9yZ2FuaXphdGlvbgorICovCisjZGVmaW5lIENGR19NQVhfRkxBU0hfQkFOS1MgICAgICAyICAgICAgICAgICAvKiBtYXggbnVtYmVyIG9mIG1lbW9yeSBiYW5rcyAqLworI2RlZmluZSBDRkdfTUFYX0ZMQVNIX1NFQ1QgICAgICAgKDI1OSkJICAgICAvKiBtYXggbnVtYmVyIG9mIHNlY3RvcnMgb24gb25lIGNoaXAgKi8KKworI2RlZmluZSBDRkdfRU5WX0FERFIgICAgICAgICAgICAgKENGR19GTEFTSF9CQVNFICsgU1pfMTI4SykKKyNkZWZpbmUJQ0ZHX0VOVl9JU19JTl9GTEFTSCAgICAgIDEKKworLyogdGltZW91dCB2YWx1ZXMgYXJlIGluIHRpY2tzICovCisjZGVmaW5lIENGR19GTEFTSF9FUkFTRV9UT1VUICAgICAoMTAqNzUqQ0ZHX0haKSAvKiBUaW1lb3V0IGZvciBGbGFzaCBFcmFzZSAqLworI2RlZmluZSBDRkdfRkxBU0hfV1JJVEVfVE9VVCAgICAgKDEwKjc1KkNGR19IWikgLyogVGltZW91dCBmb3IgRmxhc2ggV3JpdGUgKi8KKworI2VuZGlmCQkJCQkJCS8qIF9fQ09ORklHX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbnMxNjU1MC5oIGIvaW5jbHVkZS9uczE2NTUwLmgKaW5kZXggNTg5MDI0Ni4uZTE3YTExZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uczE2NTUwLmgKKysrIGIvaW5jbHVkZS9uczE2NTUwLmgKQEAgLTcyLDcgKzcyLDcgQEAKIAlpbnQgcGFkNzoyNDsKIAl1bnNpZ25lZCBjaGFyIHNjcjsJCS8qIDcgKi8KIAlpbnQgcGFkODoyNDsKLSNpZiBkZWZpbmVkKENPTkZJR19PTUFQMTUxMCkgfHwgZGVmaW5lZChDT05GSUdfT01BUDE2MTApCisjaWYgZGVmaW5lZChDT05GSUdfT01BUCkKIAl1bnNpZ25lZCBjaGFyIG1kcjE7CQkvKiBtb2RlIHNlbGVjdCByZXNldCBUTDE2Qzc1MCovCiAjZW5kaWYKICNpZmRlZiBDT05GSUdfT01BUDE1MTAKZGlmZiAtLWdpdCBhL2xpYl9hcm0vY2FjaGUuYyBiL2xpYl9hcm0vY2FjaGUuYwppbmRleCA0ZjNjYmMyLi42MWVlOWQzIDEwMDY0NAotLS0gYS9saWJfYXJtL2NhY2hlLmMKKysrIGIvbGliX2FybS9jYWNoZS5jCkBAIC0yMyw3ICsyMywxNCBAQAogCiAvKiBmb3Igbm93OiBqdXN0IGR1bW15IGZ1bmN0aW9ucyB0byBzYXRpc2Z5IHRoZSBsaW5rZXIgKi8KIAorI2luY2x1ZGUgPGNvbW1vbi5oPgorCiB2b2lkICBmbHVzaF9jYWNoZSAodW5zaWduZWQgbG9uZyBkdW1teTEsIHVuc2lnbmVkIGxvbmcgZHVtbXkyKQogeworI2lmZGVmIENPTkZJR19PTUFQMjQyMAorCXZvaWQgYXJtMTEzNl9jYWNoZV9mbHVzaCh2b2lkKTsKKworCWFybTExMzZfY2FjaGVfZmx1c2goKTsKKyNlbmRpZgogCXJldHVybjsKIH0K